Javascript 对象文本中的arrow函数
我有这个对象Javascript 对象文本中的arrow函数,javascript,this,arrow-functions,Javascript,This,Arrow Functions,我有这个对象 let p = { name : 'Amir', say: () => { console.log(this.name) console.log(this) } } 我希望say函数使用这个函数工作 p.say(); 但是arrow函数显然将窗口对象作为“this”获取。我知道我可以用一个常规的函数来代替arrow,它可以很好地工作 但是 我只想更改say函数的调用以使其工作,但绑定无法工作。 我的意思是像p.say
let p = {
name : 'Amir',
say: () => {
console.log(this.name)
console.log(this)
}
}
我希望say函数使用这个函数工作
p.say();
但是arrow函数显然将窗口对象作为“this”
获取。我知道我可以用一个常规的函数来代替arrow,它可以很好地工作
但是
我只想更改say函数的调用以使其工作,但绑定无法工作。
我的意思是像p.say.bind(p)(
或p.say.call(p)
这样的东西不能按预期工作。
是否可以只更改对函数的调用而不更改say函数?正如所解释的,它们没有自己的this
,因此,它们不能使用bind()
或call()
或apply()
绑定到对象。答案是“否”。仅仅改变通话地点是不可能的。原因是arrow函数根本没有这个
绑定。您正在使用的这个
是从其外部作用域访问的,就像您的函数关闭的任何其他标识符一样。这就像您在函数外部定义了一个foo
变量,然后将console.log(foo)
放在函数内部一样。因为函数没有自己的foo
,所以它得到了外部函数。p.say=p.say.bind(p)
。。。