第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

Javascript箭頭函數(shù)詞法范圍:對(duì)象文字與“新”運(yùn)算符

Javascript箭頭函數(shù)詞法范圍:對(duì)象文字與“新”運(yùn)算符

慕桂英546537 2023-09-21 10:55:21
我試圖了解箭頭函數(shù)在 JS 中的工作原理。讓我困惑的一件事是:let obj1 = { // MDN states that object literal does not create a new scope but I didn't find              // any detailed explanation why  name: "benny",  getName: () => {    console.log(this.name);  },};obj1.getName(); // prints "undefined"class myObj {  constructor() {    this.name = "benny";    this.getName = () => {      console.log(this.name);    };  }}let obj2 = new myObj();obj2.getName(); //prints "benny"有人可以解釋一下為什么對(duì)象文字不創(chuàng)建新作用域,而調(diào)用“new”卻創(chuàng)建新作用域嗎?(我一直認(rèn)為對(duì)象字面量和“new”運(yùn)算符是相等的;我在 MDN 中沒有找到正確的解釋。)我找到了關(guān)于new 運(yùn)算符如何工作的解釋。但我不清楚為什么對(duì)象文字的工作方式不同。
查看完整描述

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


查看完整回答
反對(duì) 回復(fù) 2023-09-21
?
holdtom

TA貢獻(xiàn)1805條經(jīng)驗(yàn) 獲得超10個(gè)贊

因此,每當(dāng)您在任何地方使用箭頭函數(shù)時(shí),它都不會(huì)擁有this自己的箭頭函數(shù),因?yàn)樗鼘⒁?code>this其父函數(shù)(簡(jiǎn)單地說)。

因此,在第一種情況下,它引用了thiswindow ,因此也引用了undefined。

在第二種情況下,引用構(gòu)造函數(shù)的“this”,因此引用“benny”。


查看完整回答
反對(duì) 回復(fù) 2023-09-21
?
大話西游666

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ù)中定義的。


查看完整回答
反對(duì) 回復(fù) 2023-09-21
  • 3 回答
  • 0 關(guān)注
  • 143 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)