技術(shù)頻道導(dǎo)航
HTML/CSS
.NET技術(shù)
IIS技術(shù)
PHP技術(shù)
Js/JQuery
Photoshop
Fireworks
服務(wù)器技術(shù)
操作系統(tǒng)
網(wǎng)站運(yùn)營(yíng)

贊助商

分類目錄

贊助商

最新文章

搜索

【示例】分析箭頭函數(shù)中的this值

作者:admin    時(shí)間:2022-6-8 22:32:13    瀏覽:

在前文中,我介紹了常規(guī)函數(shù)中的this,然而箭頭函數(shù)與常規(guī)函數(shù)不同,此外,箭頭函數(shù)與常規(guī)函數(shù)的this也不同,因此,在本文中,我將介紹箭頭函數(shù)中的this值。

this是定義箭頭函數(shù)的封閉上下文

箭頭函數(shù)不會(huì)創(chuàng)建自己的執(zhí)行上下文,而是用this從定義它的外部函數(shù)中獲取。換句話說,箭頭函數(shù)在this詞法上解析。

 分析箭頭函數(shù)中的this值

以下示例顯示了上下文透明度屬性:

class Point {
  constructor(x, y) {
    this.x = x;
    this.y = y;
  }
  log() {
    console.log(this === myPoint); // => true
    setTimeout(() => {
      console.log(this === myPoint);      // => true
      console.log(this.x + ':' + this.y); // => '95:165'
    }, 1000);
  }
}
const myPoint = new Point(95, 165);
myPoint.log();

setTimeout()使用與log()方法相同的上下文(myPoint 對(duì)象)調(diào)用箭頭函數(shù)。正如你所見,箭頭函數(shù)從定義它的函數(shù)“繼承”上下文。

此示例中的常規(guī)函數(shù)??將創(chuàng)建自己的上下文——windowundefined(在嚴(yán)格模式下),因此,要使相同的代碼與函數(shù)表達(dá)式一起正常工作,必須手動(dòng)綁定上下文:setTimeout(function() {...}.bind(this)), 這很冗長(zhǎng),使用箭頭函數(shù)是一種更簡(jiǎn)潔、更短的解決方案。

如果箭頭函數(shù)定義在最頂層范圍(任何函數(shù)之外),則上下文始終是全局對(duì)象(window在瀏覽器中):

const getContext = () => {
 console.log(this === window); // => true
 return this;
};
console.log(getContext() === window); // => true

使用上下文修改方法也無法修改this

箭頭函數(shù)與this詞匯永遠(yuǎn)綁定在一起。即使使用上下文修改方法也無法修改this

const numbers = [1, 2];
(function() { 
  const get = () => {
    console.log(this === numbers); // => true
    return this;
  };
  
  console.log(this === numbers); // => true
  get(); // => [1, 2]
  
  // 試圖手動(dòng)修改箭頭函數(shù)上下文
  get.call([0]);  // => [1, 2]
  get.apply([0]); // => [1, 2]
  
  get.bind([0])(); // => [1, 2]
}).call(numbers);

無論箭頭函數(shù)get()如何調(diào)用,它始終保持詞法上下文numbers。用其他上下文get.call([0])get.apply([0])間接調(diào)用,重新綁定get.bind([0])()無效。

箭頭函數(shù)不能用作構(gòu)造函數(shù)。將其作為構(gòu)造函數(shù)new get()調(diào)用會(huì)引發(fā)錯(cuò)誤:TypeError: get is not a constructor。

總結(jié)

本文通過幾個(gè)示例,介紹了箭頭函數(shù)中的this值。通過本文的學(xué)習(xí),我們應(yīng)該了解“上下文——箭頭函數(shù)——this”之間的意義。

相關(guān)文章

標(biāo)簽: this  箭頭函數(shù)  
x
  • 站長(zhǎng)推薦
/* 左側(cè)顯示文章內(nèi)容目錄 */