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)
。。。