成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

this詳解

Youngs / 3493人閱讀

摘要:含義既不指向函數(shù)本身,也不指向函數(shù)的詞法作用域。運(yùn)行時(shí)動(dòng)態(tài)綁定,并不是編寫綁定,上下文取決于函數(shù)調(diào)用的各種條件。

含義

既不指向函數(shù)本身,也不指向函數(shù)的詞法作用域。

運(yùn)行時(shí)動(dòng)態(tài)綁定,并不是編寫綁定,上下文取決于函數(shù)調(diào)用的各種條件。

指向取決于函數(shù)被調(diào)用的位置,也是在函數(shù)調(diào)用時(shí)候發(fā)生綁定。

解析 調(diào)用棧(可以比擬成函數(shù)調(diào)用鏈)

指到達(dá)當(dāng)前執(zhí)行位置所調(diào)用的所有函數(shù)

so調(diào)用位置(函數(shù)被調(diào)用的位置,而不是聲明位置)就是當(dāng)前執(zhí)行函數(shù)的前一個(gè)調(diào)用

function foo() {
    // 當(dāng)前調(diào)用棧 => foo
    // 當(dāng)前調(diào)用位置 => global全局作用域
    
    console.log("foo")
    bar() // bar調(diào)用位置
}

function bar() {
    // 當(dāng)前調(diào)用棧 => foo -> bar
    // 當(dāng)前調(diào)用位置 foo
    
    console.log("bar")
}
綁定規(guī)則

默認(rèn) => 獨(dú)立函數(shù)調(diào)用

this默認(rèn)綁定,指向全局對(duì)象

隱式 => 是否存在上下文 / 被某個(gè)對(duì)象擁有或包含

當(dāng)函數(shù)引用存在上下文,this會(huì)被隱式綁定到這個(gè)上下文對(duì)象

對(duì)象屬性引用鏈只對(duì)調(diào)用位置的(上一層 / 最后一層)有效

function foo() {
    return this.a
}

const obj = {
    a: "hello",
    foo, // 函數(shù)引用,當(dāng)前上下文是obj
}

obj.foo()
    

顯式綁定 => call, apply, bind

硬綁定

function foo() {
    return this.a
}

const obj = {
    a: "hello
}

const bar = function() {
    foo.call(obj) // 顯式的強(qiáng)制綁定
}
setTimeout(bar, 300)
bar.call(window) // 2 => 硬綁定之后this無法再修改

new綁定 => 構(gòu)造函數(shù)調(diào)用,實(shí)際上并不存在“構(gòu)造函數(shù)”,是對(duì)函數(shù)的“構(gòu)造調(diào)用”

創(chuàng)建(構(gòu)造)一個(gè)全新的對(duì)象

這個(gè)對(duì)象會(huì)被執(zhí)行[[Prototype]]連接

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

如果函數(shù)沒有返回對(duì)象,直接返回這個(gè)新對(duì)象

注意點(diǎn)

隱式綁定會(huì)丟失綁定對(duì)象,從而應(yīng)用默認(rèn)綁定,分別有以下兩種情況。

函數(shù)別名 => 引用函數(shù)本身,so默認(rèn)綁定

function foo() {
    return this.a
}

const obj = {
    a: "hello",
    foo, // 函數(shù)引用,當(dāng)前上下文是obj
}

const a = "on no, this is global"
const bar = obj.foo // 函數(shù)別名
bar() // "on no, this is global"
    

參數(shù)傳遞 => 隱式賦值,同上

function foo() {
    return this.a
}

function doFoo(fn) {
    
    fn() // fn => foo
}

const obj = {
    a: "hello",
    foo, // 函數(shù)引用,當(dāng)前上下文是obj
}

const a = "on no, this is global"
doFoo(obj.foo) // "on no, this is global"
    

優(yōu)先級(jí)

顯式 > 隱式

new > 隱式

new可以修改顯式的this

    function foo(some) {
        this.a = some
    }
    
    const obj = {}
    
    const bar =  foo.bind(obj)
    bar(2)
    console.log(obj.a) // 2
    
    const baz = new bar(3)
    console.log(obj.a) // 2
    console.log(baz.a) // 3 => new 修改了this綁定

new中使用硬綁定 => 函數(shù)柯理化

    function foo(a, b) {
        this.value = a + b
    }
    
    const bar = foo.bind(null, "hello ") //這里 this不指定,new時(shí)會(huì)修改
    const baz = new bar("world")
    baz.value // "hello world"

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

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

相關(guān)文章

  • JavaScript 中 this詳解

    摘要:作為構(gòu)造函數(shù)調(diào)用中沒有類,但是可以從構(gòu)造器中創(chuàng)建對(duì)象,并提供了運(yùn)算符來進(jìn)行調(diào)用該構(gòu)造器。構(gòu)造器的外表跟普通函數(shù)一樣,大部分的函數(shù)都可以當(dāng)做構(gòu)造器使用。如果構(gòu)造函數(shù)顯式的返回一個(gè)對(duì)象,那么則會(huì)指向該對(duì)象。 this 的指向 this 是 js 中定義的關(guān)鍵字,它自動(dòng)定義于每一個(gè)函數(shù)域內(nèi),但是它的指向卻讓人很迷惑。在實(shí)際應(yīng)用中,this 的指向大致可以分為以下四種情況。 1.作為普通函數(shù)調(diào)...

    cyrils 評(píng)論0 收藏0
  • JavaScript之this對(duì)象詳解

    摘要:再來看一個(gè)小的示例淘寶騰訊淘寶為什么輸出的依然是淘寶呢調(diào)用的是對(duì)象中的方法,方法里面有一個(gè)定時(shí)器,而定時(shí)器的一個(gè)參數(shù)是這里的指的就是的對(duì)象,然后方法里面有調(diào)用了,但是定時(shí)器中的指的是對(duì)象,所以最終調(diào)用的是對(duì)象中。 1.看前熱身 看一段代碼 var name = javascript; var obj = { name:js, foo:f...

    Integ 評(píng)論0 收藏0
  • 20190725筆記-apply詳解

    摘要:語法參數(shù)這個(gè)對(duì)象將替代類里的對(duì)象可選在函數(shù)運(yùn)行時(shí)使用的值。如果該參數(shù)的值為或,則表示不需要傳入任何參數(shù)。更簡單的講就是將和傳入函數(shù)執(zhí)行。 學(xué)了那么久前端,對(duì)apply、call這兩個(gè)函數(shù)的用法,還不是很掌握。今天看了很多網(wǎng)上的文章,我總結(jié)和歸納下用法。 Function.prototype.apply() apply() 方法調(diào)用一個(gè)具有給定this值的函數(shù),以及作為一個(gè)數(shù)組(或類似數(shù)...

    wzyplus 評(píng)論0 收藏0
  • javascript this指針詳解

    摘要:但是有一個(gè)總的原則,那就是指的是,調(diào)用函數(shù)的那個(gè)對(duì)象使用主要分四種情況,討論下指針的用法和注意事項(xiàng)一純粹的函數(shù)調(diào)用這是函數(shù)的最通常用法,屬于全局性調(diào)用,因此就代表全局對(duì)象。 this是Javascript語言的一個(gè)關(guān)鍵字它代表函數(shù)運(yùn)行時(shí),自動(dòng)生成的一個(gè)內(nèi)部對(duì)象,只能在函數(shù)內(nèi)部使用,隨著函數(shù)使用場合的不同,this的值會(huì)發(fā)生變化。但是有一個(gè)總的原則,那就是this指的是,調(diào)用函數(shù)的那個(gè)對(duì)...

    graf 評(píng)論0 收藏0
  • javascript this指針詳解

    摘要:但是有一個(gè)總的原則,那就是指的是,調(diào)用函數(shù)的那個(gè)對(duì)象使用主要分四種情況,討論下指針的用法和注意事項(xiàng)一純粹的函數(shù)調(diào)用這是函數(shù)的最通常用法,屬于全局性調(diào)用,因此就代表全局對(duì)象。 this是Javascript語言的一個(gè)關(guān)鍵字它代表函數(shù)運(yùn)行時(shí),自動(dòng)生成的一個(gè)內(nèi)部對(duì)象,只能在函數(shù)內(nèi)部使用,隨著函數(shù)使用場合的不同,this的值會(huì)發(fā)生變化。但是有一個(gè)總的原則,那就是this指的是,調(diào)用函數(shù)的那個(gè)對(duì)...

    AlphaWallet 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

Youngs

|高級(jí)講師

TA的文章

閱讀更多
最新活動(dòng)
閱讀需要支付1元查看
<