0

注释:我知道希望重新绑定关键字。我想要以引用调用对象。然而,我会的,希望能够引用定义我的方法的类的实例。如何访问实例?

在JavaScript中关键字是指调用对象。因此,当我定义类时:

A级{x=5;打印x(){console.log(this.x);}}

然后当我打电话给打印方法直接从的实例A类,我得到5:

a=新a();a.打印x();

但是当我打电话的时候打印x从不同的背景出发,这个。x个不是a.x公司,可能是窗口。x个或其他内容:

b=a.printx;b();//TypeError:未定义

我想定义打印x以这种方式呼叫b条控制台.log(5)也就是说,我想得到自己Python的行为。我该如何提及自己用JavaScript?

9
  • 此处的顶部答案比顶部链接的答案要完整得多:stackoverflow.com/questions/20279484/…
    – 费利波
    评论 2022年10月19日20:59
  • @felipou这个问题的答案从来没有定义过我意识到这只是老式javascript类的语法糖,但它使链接中的答案难以解析。也就是说,为了知道我(简单)问题的答案,我必须理解困难而深刻的概念,并摸索javascript语言的历史。
    – 
    评论 2022年10月19日21:08
  • 1
    好的,在这种情况下,您可以传递一个调用该方法的不同函数。例如,foo={()=>a.printx()}(在反应上下文中)在vanilla中应该是这样的:.then(()=>a.打印x())
    – 凯文·B
    评论 2022年10月20日14:54
  • 1
    箭头函数通常是解决这个问题的方法,但这不是类方法的问题然而,所以在您的情况下,您需要一个构造函数,它可以按照this.printx=()=>控制台.log(this.x)this.printx=this.prinx.bind(this),导致this.printx引用的函数直接绑定到该实例,而不是引用的上下文。
    – 凯文·B
    评论 2022年10月20日15:13
  • 1
    现在这可能真的是一件事,不确定。。。过去几年一直没有跟上js的发布。如果是,那么你只需要改变打印x(){打印x=()=>{
    – 凯文·B
    评论 2022年10月20日15:19

1答案1

重置为默认值
5

使用功能.原型.bind赋值时将函数绑定到上下文b条

A级{x=5;打印x(){console.log(this.x);}}设a=新的a()设b=a.printx.bind(a)b()

不是你想要的答案吗?浏览标记的其他问题问你自己的问题.