3 回答
TA貢獻1805條經驗 獲得超10個贊
因此,每當您在任何地方使用箭頭函數時,它都不會擁有this自己的箭頭函數,因為它將引用this其父函數(簡單地說)。
因此,在第一種情況下,它引用了thiswindow ,因此也引用了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通過原型更改 的函數,因為該函數實際上是在幕后的構造函數中定義的。
添加回答
舉報
