3 回答
TA贡献1805条经验 获得超10个赞
因此,每当您在任何地方使用箭头函数时,它都不会拥有this
自己的箭头函数,因为它将引用this
其父函数(简单地说)。
因此,在第一种情况下,它引用了this
window ,因此也引用了undefined
。
在第二种情况下,引用构造函数的“this”,因此引用“benny”。
TA贡献1817条经验 获得超14个赞
class myObj {
constructor() {
this.name = "benny";
}
getName() {
console.log(this.name);
}
getName2 = () => {
console.log(this.name);
}
}
let obj2 = new myObj();
obj2.getName();
obj2.getName2();
我想提出这个例子,因为我认为它非常有趣——这并不是直接回答你的问题,而只是一些附加信息。
人们正在讨论在构造函数中定义它如何使this
属性引用对象本身 - 因为这就是this
构造函数中的含义!所以我想看看如果你按照我上面的方式定义一个箭头函数会发生什么,getName2
它不在构造函数中,但它仍然被this
定义为对象本身。所以为什么?
好吧,事实证明,当您以这种方式定义箭头函数时,它实际上最终会在构造函数中定义。我认为箭头函数存在某种code hoisting
类似的情况。您实际上可以通过尝试更改原型上的函数来验证它:
myObj.prototype.getName = () => {console.log('hello world')} myObj.prototype.getName2 = () => {console.log('hello world')} obj2.getName(); // this prints 'hello world' obj2.getName2(); // this does not
您无法getName2
通过原型更改 的函数,因为该函数实际上是在幕后的构造函数中定义的。
添加回答
举报