亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專欄INFORMATION COLUMN

this綁定規(guī)則

zgbgx / 2583人閱讀

摘要:默認綁定最常用的函數(shù)調(diào)用類型獨立函數(shù)調(diào)用,這條規(guī)則可以看作無法應(yīng)用其他規(guī)則時的默認規(guī)則非嚴格模式下如果是嚴格模式下會輸出在調(diào)用時沒有任何的修飾函數(shù),因此只能使用默認綁定,指向全局變量作用域,被解析成全局變量隱式綁定示例代碼如上例所示,在對象

默認綁定

最常用的函數(shù)調(diào)用類型:獨立函數(shù)調(diào)用,這條規(guī)則可以看作無法應(yīng)用其他規(guī)則時的默認規(guī)則

function one() {
  console.log(this.a)
}

var a = 1
one() //1 非嚴格模式下 如果是嚴格模式下會輸出undefined

one在調(diào)用時沒有任何的修飾函數(shù),因此只能使用默認綁定,this指向全局變量作用域,this.a被解析成全局變量a

隱式綁定

示例代碼:

function one() {
  console.log(this.a)
}

var obj = {
  a : 1,
  one : one
}

obj.one() //1 

如上例所示,在對象被調(diào)用時,調(diào)用位置存在上下文對象,one被當作引用屬性添加到obj中,當one被調(diào)用時,加上了對obj的引用,即此時函數(shù)引用有上下文對象,隱式綁定規(guī)則會把函數(shù)調(diào)用中的this綁定到這個上下文對象上,因此此時的this.a等同于obj.a
Tips:對象屬性引用鏈中只有上一層或者說最里面一層在調(diào)用位置中起作用,例子:

function one() {
  console.log(this.a)
}

var obj = {
  a : 1,
  one : one
}

var obj1 = {
  obj : obj,
  a : 2
}

obj1.obj.one() //1
隱式丟失

隱式綁定最常見的問題就是被隱式綁定的函數(shù)會丟失綁定的對象,即它會使用默認綁定,將this綁定到全局對象上

function one() {
  console.log(this.a)
}

var obj = {
  a : 1,
  one : one
}

var another = obj.one
var a = 2
another() //2

雖然another是obj.one的一個引用,但是實際上,它引用的是one函數(shù)本身,因此此時another()是一個不帶任何修飾的函數(shù)調(diào)用,會應(yīng)用默認綁定

顯示綁定

顯示綁定常見的綁定形式就是使用函數(shù)call()和apply()修改this的指向,它們的第一個參數(shù)就是一個對象,是給this準備的,即在后面時this的指向域,示例代碼:

function one() {
  console.log(this.a)
}

var obj = {
  a : 1,
}

one.call(obj) //1
硬綁定

有時顯示綁定不一定能解決我們碰到的問題,比如我們需要將this強制綁定到一個對象上,之后無論怎么調(diào)用都無法修改this指向,示例代碼:

function one() {
  console.log(this.a)
}

var obj = {
  a : 1,
}

var a = 2
var another = function () {
  one.call(obj)
}
another() //1
another.call(window) //1

硬綁定將one的this強制綁定在了obj上,無論之后如何調(diào)用函數(shù)another(),它總會手動在obj上調(diào)用one

bind方法綁定

示例代碼:

function one() {
  console.log(this.a)
}

var obj = {
  a : 1,
}

var another = one.bind(obj)
another() //1

bind()會返回一個硬編碼的新函數(shù),它會把你指定的參數(shù)設(shè)置為this的上下文并調(diào)用原始函數(shù)

new綁定

使用new來調(diào)用函數(shù)時需要注意的點
Tips:

創(chuàng)建(或者說構(gòu)造)一個全新的對象

這個對象會綁定到函數(shù)調(diào)用的this

如果函數(shù)沒有返回其他對象,那么new表達式中的函數(shù)調(diào)用會自動返回這個新對象

示例代碼:

function one(a) {
  this.a = a
}
var another = new one(1)
console.log(another.a)

使用new來調(diào)用one()時,會構(gòu)造一個新對象并把它綁定到one()調(diào)用中的this上

判斷this綁定規(guī)則

函數(shù)是否在new中調(diào)用(new綁定)?如果是的話this綁定的是新創(chuàng)建的對象

函數(shù)是否通過call、apply(顯示綁定)或者硬綁定調(diào)用?如果是的話,this綁定是指定的對象

函數(shù)是否在某個上下文對象中調(diào)用(隱式綁定)?如果是的話,this綁定的是那個上下文對象

如果都不是,使用默認綁定,如果在嚴格模式下就綁定到undefined,否則綁定到全局對象

以上綁定規(guī)則優(yōu)先級由高到低,感興趣的可以自己去動手驗證一下

以上內(nèi)容是個人的一點總結(jié),如果有錯誤或不嚴謹?shù)牡胤?,歡迎批評指正,如果喜歡,歡迎點贊收藏

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://www.ezyhdfw.cn/yun/88617.html

相關(guān)文章

  • JavaScript中this綁定詳解

    摘要:綁定最后要講的一種綁定規(guī)則,是指通過操作符調(diào)用構(gòu)造函數(shù)時發(fā)生的綁定。因此,所謂的綁定是指通過操作符來調(diào)用函數(shù)時,會產(chǎn)生一個新對象,并且會把構(gòu)造函數(shù)內(nèi)的綁定到這個對象上。事實上,在中,使用來調(diào)用函數(shù),會自動執(zhí)行下面的操作。 轉(zhuǎn)載請注明出處 https://segmentfault.com/a/11... this 可以說是 javascript 中最耐人尋味的一個特性,就像高中英語里各種...

    yacheng 評論0 收藏0
  • 你不知道的js中關(guān)于this綁定機制的解析[看完還不懂算我輸]

    摘要:綁定書中提到在中,實際上并不存在所謂的構(gòu)造函數(shù),只有對于函數(shù)的構(gòu)造調(diào)用。規(guī)則使用構(gòu)造調(diào)用的時候,會自動綁定在期間創(chuàng)建的對象上。指向新創(chuàng)建的對象綁定比隱式綁定優(yōu)先級高。 showImg(http://ww1.sinaimg.cn/large/005Y4rCogy1fstcwvzkjzj30sg0g0qqn.jpg); 前言 最近正在看《你不知道的JavaScript》,里面關(guān)于this綁...

    dunizb 評論0 收藏0
  • 關(guān)于 this 你想知道的一切都在這里

    摘要:如下在第一個例子中,被點擊元素是通過,這個形式參數(shù)來代替的。它的作用和形式參數(shù)類似,其本質(zhì)上是一個對象的引用,它的特殊性在于不需要手動傳值,所以使用起來會更加簡單和方便。 無論在 javascript 的日常使用中還是前端面試過程中,this 的出鏡率都極高。這無疑說明了,this 的重要性。但是 this 非常靈活,導(dǎo)致很多人覺得 this 的行為難以理解。本文從為什么要有 this...

    Lemon_95 評論0 收藏0
  • JS中的this詳解

    摘要:實際上并不存在什么構(gòu)造函數(shù),只存在對于函數(shù)的構(gòu)造調(diào)用發(fā)生構(gòu)造函數(shù)的調(diào)用時,會自動執(zhí)行下邊的操作創(chuàng)建一個全新的對象。說明綁定的優(yōu)先級高于硬綁定。 原文閱讀 ??js中的this是很容易讓人覺得困惑的地方,這篇文章打算說一下this綁定的幾種情況,相信可以解決大部分關(guān)于this的疑惑。 this是在運行的時候綁定的,不是在編寫的時候綁定的,函數(shù)調(diào)用的方式不同,就可能使this所綁定的對象不...

    Mike617 評論0 收藏0
  • 徹底搞懂 JS 中 this 機制

    摘要:的四種綁定規(guī)則的種綁定規(guī)則分別是默認綁定隱式綁定顯示綁定綁定。綁定中的操作符,和其他語言中如的機制是不一樣的。規(guī)則例外在顯示綁定中,對于和的綁定將不會生效。它也是作為機制的一種替換,解決之前綁定過程各種規(guī)則帶來的復(fù)雜性。 徹底搞懂 JS 中 this 機制 摘要:本文屬于原創(chuàng),歡迎轉(zhuǎn)載,轉(zhuǎn)載請保留出處:https://github.com/jasonGeng88/blog 目錄 t...

    李世贊 評論0 收藏0

發(fā)表評論

0條評論

zgbgx

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<