成人无码视频,亚洲精品久久久久av无码,午夜精品久久久久久毛片,亚洲 中文字幕 日韩 无码

資訊專欄INFORMATION COLUMN

this的隱式綁定(implicit binding)

walterrwu / 2631人閱讀

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

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

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

obj.foo(); // 2

this指向了obj,因為foo執(zhí)行時call-site(可以理解為調(diào)用時所在作用域)在obj上面。注意是運(yùn)行的時候,和在哪里聲明的沒有關(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,此時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`

理解之后再回頭看開頭的例子,是不是感覺清晰了很多。其實(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)于是直接對foo引用而已,所以會默認(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)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://m.hztianpu.com/yun/78716.html

相關(guān)文章

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

    摘要:但在嚴(yán)格模式下默認(rèn)綁定不起作用顯式綁定顯式綁定用到了和方法,因為可以直接指定的綁定對象,因此稱之為顯式綁定。隱式綁定顯式綁定當(dāng)我們使用顯式綁定時,輸出的值為的值所以顯式綁定的優(yōu)先級更高。 上篇文章介紹了this的隱式綁定(implicit binding),接著介紹this其他三種綁定方式 默認(rèn)綁定 (Default Binding) 顯式綁定 (Explicit Binding) ...

    weknow619 評論0 收藏0
  • JS 中的 __proto__ 與 prototype

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

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

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

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

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

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

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

    light 評論0 收藏0

發(fā)表評論

0條評論

walterrwu

|高級講師

TA的文章

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