最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

深入理解Javascript箭頭函數(shù)中的this

 更新時(shí)間:2017年02月13日 08:36:04   作者:Heero.Luo  
ES6標(biāo)準(zhǔn)新增了一種新的函數(shù):Arrow Function(箭頭函數(shù))。那么下面這篇文章主要給大家介紹了箭頭函數(shù)中this的相關(guān)資料,有需要的朋友可以參考借鑒,下面來一起看看吧。

首先我們先看一段代碼,這是一個(gè)實(shí)現(xiàn)倒數(shù)功能的類「Countdown」及其實(shí)例化的過程:

function Countdown(seconds) {
 this._seconds = seconds;
}
Countdown.prototype._step = function() {
 console.log(this._seconds);
 if (this._seconds > 0) {
  this._seconds -= 1;
 } else {
  clearInterval(this._timer);
 }
};
Countdown.prototype.start = function() {
 this._step();
 this._timer = setInterval(function() {
  this._step();
 }, 1000);
};

new Countdown(10).start();

運(yùn)行這段代碼時(shí),將會(huì)出現(xiàn)異?!?code>this._step is not a function」。

這是Javascript中頗受詬病的「this錯(cuò)亂」問題:setInterval重復(fù)執(zhí)行的函數(shù)中的this已經(jīng)跟外部的this不一致了。

要解決這個(gè)問題,有三個(gè)方法。

閉包

新增一個(gè)變量指向期望的this,然后將該變量放到閉包中:

Countdown.prototype.start = function() {
 var self = this;
 this._step();
 this._timer = setInterval(function() {
  self._step();
 }, 1000);
};

bind函數(shù)

ES5給函數(shù)類型新增的「bind」方法可以改變函數(shù)(實(shí)際上是返回了一個(gè)新的函數(shù))的「this」:

Countdown.prototype.start = function() {
  this._step();
  this._timer = setInterval(function() {
    this._step();
  }.bind(this), 1000);
};

箭頭函數(shù)

這正是本文要重點(diǎn)介紹的解決方案。箭頭函數(shù)是ES6中新增的語言特性,表面上看,它只是使匿名函數(shù)的編碼更加簡(jiǎn)短,但實(shí)際上它還隱藏了一個(gè)非常重要的細(xì)節(jié)——箭頭函數(shù)會(huì)捕獲其所在上下文的this作為自己的this。也就是說,箭頭函數(shù)內(nèi)部與其外部的this是保持一致的。

所以,解決方案如下:

Countdown.prototype.start = function() {
  this._step();
  this._timer = setInterval(() => {
    this._step();
  }, 1000);
};

這無疑使this的處理更加方便了。然而,對(duì)各位Javascript Coder而言,判斷this指向時(shí)的情況可就又多了一種了。

總結(jié)

以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作能帶來一定的幫助,如果有疑問大家可以留言交流。

相關(guān)文章

最新評(píng)論

无极县| 辽宁省| 广西| 赤水市| 吕梁市| 开封县| 共和县| 凌源市| 福鼎市| 连云港市| 仲巴县| 阿拉善盟| 葫芦岛市| 龙岩市| 阜南县| 新晃| 泸州市| 遵义县| 兖州市| 舒兰市| 武定县| 武定县| 长阳| 定州市| 莫力| 桐柏县| 东乡族自治县| 利辛县| 东安县| 子长县| 江孜县| 游戏| 滁州市| 博兴县| 南城县| 韶关市| 漠河县| 疏勒县| 榆林市| 随州市| 曲阜市|