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

資訊專欄INFORMATION COLUMN

this的隱式綁定(implicit binding)

walterrwu / 2593人閱讀

摘要:姑且理解為調(diào)用域,為調(diào)用棧。如下代碼可以輔助我們理解在中調(diào)用所以的調(diào)用域是,此時(shí)的調(diào)用棧只有而本身暴露在全局作用域中,所以它的調(diào)用域則也在全局作用域中。

show code
function foo() {
    console.log( this.a );
}

var obj = {
    a: 2,
    foo: foo
};

obj.foo(); // 2

this指向了obj,因?yàn)?b>foo執(zhí)行時(shí)的call-site(可以理解為調(diào)用時(shí)所在作用域)在obj上面。注意是運(yùn)行的時(shí)候,和在哪里聲明的沒(méi)有關(guān)系。

call-site and call-stack

call-site姑且理解為調(diào)用域,call-stack調(diào)用棧。如下代碼可以輔助我們理解

function baz() {
    // call-stack is: `baz`
    // so, our call-site is in the global scope

    console.log( "baz" );
    bar(); // <-- call-site for `bar`
}

baz()中調(diào)用bar(),所以bar的調(diào)用域是baz,此時(shí)bar的調(diào)用棧只有baz;而baz本身暴露在全局作用域中,所以它的調(diào)用域則也在全局作用域中。

function bar() {
    // call-stack is: `baz` -> `bar`
    // so, our call-site is in `baz`

    console.log( "bar" );
    foo(); // <-- call-site for `foo`
}

function foo() {
    // call-stack is: `baz` -> `bar` -> `foo`
    // so, our call-site is in `bar`

    console.log( "foo" );
}

baz(); // <-- call-site for `baz`

理解之后再回頭看開(kāi)頭的例子,是不是感覺(jué)清晰了很多。其實(shí)this只是指向了它的call-site

還有如下玩法:

function foo() {
    console.log( this.a );
}

var obj2 = {
    a: 42,
    foo: foo
};

var obj1 = {
    a: 2,
    obj2: obj2
};

obj1.obj2.foo(); // 42
Implicitly Lost(隱式丟失)
function foo() {
    console.log( this.a );
}

var obj = {
    a: 2,
    foo: foo
};

var bar = obj.foo; // function reference/alias!

var a = "oops, global"; // `a` also property on global object

bar(); // "oops, global"

雖然bar引用了obj上的foo,但實(shí)際上相當(dāng)于是直接對(duì)foo引用而已,所以會(huì)默認(rèn)綁定到全局。

function foo() {
    console.log( this.a );
}

function doFoo(fn) {
    // `fn` is just another reference to `foo`

    fn(); // <-- call-site!
}

var obj = {
    a: 2,
    foo: foo
};

var a = "oops, global"; // `a` also property on global object

doFoo( obj.foo ); // "oops, global"

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

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

相關(guān)文章

  • this綁定方式和優(yōu)先級(jí)比較

    摘要:但在嚴(yán)格模式下默認(rèn)綁定不起作用顯式綁定顯式綁定用到了和方法,因?yàn)榭梢灾苯又付ǖ慕壎▽?duì)象,因此稱之為顯式綁定。隱式綁定顯式綁定當(dāng)我們使用顯式綁定時(shí),輸出的值為的值所以顯式綁定的優(yōu)先級(jí)更高。 上篇文章介紹了this的隱式綁定(implicit binding),接著介紹this其他三種綁定方式 默認(rèn)綁定 (Default Binding) 顯式綁定 (Explicit Binding) ...

    weknow619 評(píng)論0 收藏0
  • JS 中的 __proto__ 與 prototype

    摘要:在這篇文章中,他介紹了一種實(shí)現(xiàn)繼承的方法,這種方法并沒(méi)有使用嚴(yán)格意義上的構(gòu)造函數(shù)。的左值一般是一個(gè)對(duì)象,右值一般是一個(gè)構(gòu)造函數(shù),用來(lái)判斷左值是否是右值的實(shí)例。 __proto__ 探究 __proto__隱式原型與prototype顯式原型是個(gè)容易令人混淆的概念,簡(jiǎn)而言之prototype是構(gòu)造函數(shù)用來(lái)被自己的實(shí)例繼承的原型,而_proto_是實(shí)例用來(lái)繼承父類原型的載體。 1. 是什么...

    Donald 評(píng)論0 收藏0
  • __proto__ 和 prototype的關(guān)系

    摘要:和的關(guān)系先上答案對(duì)象上都有屬性函數(shù)也是對(duì)象一般情況下對(duì)象的屬性指向該對(duì)象的構(gòu)造函數(shù)的原型對(duì)象。兩者的關(guān)系先上一張神圖每個(gè)被構(gòu)造函數(shù)創(chuàng)建出來(lái)的對(duì)象都有一個(gè)隱式引用,指向其構(gòu)造函數(shù)的屬性的值。 showImg(https://segmentfault.com/img/bVbnO8K); __proto__ 和 prototype的關(guān)系 先上答案: ? 對(duì)象上都有__proto__屬...

    Miracle_lihb 評(píng)論0 收藏0
  • 前端筆記(一) 變量,執(zhí)行環(huán)境與作用域,this

    摘要:瀏覽器總是運(yùn)行位于作用域鏈頂部的當(dāng)前執(zhí)行上下文。作用域的前端永遠(yuǎn)是當(dāng)前執(zhí)行代碼所在環(huán)境的變量對(duì)象而全局執(zhí)行環(huán)境的變量對(duì)象始終是作用域鏈中的最后一個(gè)對(duì)象。調(diào)用棧為了達(dá)到當(dāng)前執(zhí)行位置所調(diào)用的所有函數(shù)。 ECMAScript中的變量值類型 基本類型 : Number, String, Boolean, Undefined, Null 引用類型 : Object, Array, Func...

    elva 評(píng)論0 收藏0
  • js中的this總結(jié)

    摘要:關(guān)于的指向問(wèn)題算的上是中的一個(gè)十分重要的問(wèn)題了。首先,的指向問(wèn)題可以用一句話總結(jié)就是總是指向調(diào)用的對(duì)象,也就是說(shuō)指向誰(shuí)與函數(shù)聲明的位置沒(méi)有關(guān)系,只與調(diào)用的位置有關(guān)。此外注意幾種特殊情況,特別是中的箭頭函數(shù)。 關(guān)于this的指向問(wèn)題算的上是js中的一個(gè)十分重要的問(wèn)題了。今天把這個(gè)問(wèn)題總結(jié)下,加深下自己對(duì)this的理解。首先,this的指向問(wèn)題可以用一句話總結(jié)就是:this總是指向調(diào)用的對(duì)...

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

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

0條評(píng)論

walterrwu

|高級(jí)講師

TA的文章

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