3 回答

TA貢獻(xiàn)1828條經(jīng)驗(yàn) 獲得超3個(gè)贊
運(yùn)算new
符不會(huì)創(chuàng)建新范圍。
函數(shù)創(chuàng)建了一個(gè)新的范圍。
該constructor
函數(shù)是與全局外部任意函數(shù)空間不同的函數(shù)。

TA貢獻(xiàn)1805條經(jīng)驗(yàn) 獲得超10個(gè)贊
因此,每當(dāng)您在任何地方使用箭頭函數(shù)時(shí),它都不會(huì)擁有this
自己的箭頭函數(shù),因?yàn)樗鼘⒁?code>this其父函數(shù)(簡(jiǎn)單地說)。
因此,在第一種情況下,它引用了this
window ,因此也引用了undefined
。
在第二種情況下,引用構(gòu)造函數(shù)的“this”,因此引用“benny”。

TA貢獻(xiàn)1817條經(jīng)驗(yàn) 獲得超14個(gè)贊
class myObj {
constructor() {
this.name = "benny";
}
getName() {
console.log(this.name);
}
getName2 = () => {
console.log(this.name);
}
}
let obj2 = new myObj();
obj2.getName();
obj2.getName2();
我想提出這個(gè)例子,因?yàn)槲艺J(rèn)為它非常有趣——這并不是直接回答你的問題,而只是一些附加信息。
人們正在討論在構(gòu)造函數(shù)中定義它如何使this
屬性引用對(duì)象本身 - 因?yàn)檫@就是this
構(gòu)造函數(shù)中的含義!所以我想看看如果你按照我上面的方式定義一個(gè)箭頭函數(shù)會(huì)發(fā)生什么,getName2
它不在構(gòu)造函數(shù)中,但它仍然被this
定義為對(duì)象本身。所以為什么?
好吧,事實(shí)證明,當(dāng)您以這種方式定義箭頭函數(shù)時(shí),它實(shí)際上最終會(huì)在構(gòu)造函數(shù)中定義。我認(rèn)為箭頭函數(shù)存在某種code hoisting
類似的情況。您實(shí)際上可以通過嘗試更改原型上的函數(shù)來驗(yàn)證它:
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
通過原型更改 的函數(shù),因?yàn)樵摵瘮?shù)實(shí)際上是在幕后的構(gòu)造函數(shù)中定義的。
添加回答
舉報(bào)