this對(duì)象

綁定規(guī)則:

  1. 默認(rèn)綁定
  2. 隱式綁定
  3. 顯示綁定
  4. new綁定

判斷this

現(xiàn)在我們可以根據(jù)優(yōu)先級(jí)來(lái)判斷函數(shù)在某個(gè)調(diào)用位置應(yīng)用的是哪條規(guī)則。 可以按照下面的順序來(lái)進(jìn)行判斷:

  1. 函數(shù)是否在 new 中調(diào)用( new 綁定) ? 如果是的話 this 綁定的是新創(chuàng)建的對(duì)象。
    var bar = new foo()
  2. 函數(shù)是否通過(guò) call、 apply( 顯式綁定) 或者硬綁定調(diào)用? 如果是的話, this 綁定的是
    指定的對(duì)象。
    var bar = foo.call(obj2)
  3. 函數(shù)是否在某個(gè)上下文對(duì)象中調(diào)用( 隱式綁定) ? 如果是的話, this 綁定的是那個(gè)上
    下文對(duì)象。
    var bar = obj1.foo()
  4. 如果都不是的話, 使用默認(rèn)綁定。 如果在嚴(yán)格模式'use strict'下, 就綁定到 undefined, 否則綁定到
    全局對(duì)象。
    var bar = foo()

綁定例外

一定要注意, 有些調(diào)用可能在無(wú)意中使用默認(rèn)綁定規(guī)則。 如果想“ 更安全” 地忽略 this 綁定, 你可以使用一個(gè) DMZ 對(duì)象, 比如 ? = Object.create(null), 以保護(hù)全局對(duì)象。

ES6 中的箭頭函數(shù)并不會(huì)使用四條標(biāo)準(zhǔn)的綁定規(guī)則, 而是根據(jù)當(dāng)前的詞法作用域來(lái)決定this, 具體來(lái)說(shuō), 箭頭函數(shù)會(huì)繼承外層函數(shù)調(diào)用的 this 綁定( 無(wú)論 this 綁定到什么)。 這其實(shí)和 ES6 之前代碼中的 self = this 機(jī)制一樣。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。