国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專(zhuān)欄INFORMATION COLUMN

Js中this關(guān)鍵字的指向

scq000 / 726人閱讀

摘要:而中在運(yùn)行期進(jìn)行綁定的,這是中關(guān)鍵字具備多重含義的本質(zhì)原因。那么可解釋為函數(shù)調(diào)用是用進(jìn)行調(diào)用的么這個(gè)明顯不是,進(jìn)入否分支,即函數(shù)是否用進(jìn)行調(diào)用函數(shù)是用進(jìn)行調(diào)用的,即進(jìn)入是分支,即這里的指向中之前的對(duì)象所以

1.前言

在主流的面向?qū)ο蟮恼Z(yǔ)言中(例如Java,C#等),this 含義是明確且具體的,即指向當(dāng)前對(duì)象,一般在編譯期綁定。而 JavaScript 中this 在運(yùn)行期進(jìn)行綁定的,這是JavaScript 中this 關(guān)鍵字具備多重含義的本質(zhì)原因。
JavaScript 中的 this 可以是全局對(duì)象、當(dāng)前對(duì)象或者任意對(duì)象,這完全取決于函數(shù)的調(diào)用方式。

2.JavaScript this決策樹(shù)

3.實(shí)例說(shuō)明

例1.

var point = { 
    x : 0, 
    y : 0, 
    moveTo : function(x, y) { 
        this.x = this.x + x; 
        this.y = this.y + y; 
    } 
};
point.moveTo(1,1); //this 綁定到當(dāng)前對(duì)象,即point對(duì)象

圖解point.moveTo函數(shù)的this指向什么的解析圖如下圖所示:

例2:

function func(x) { 
    this.x = x; 
} 
func(5); //this是全局對(duì)象window,x為全局變量
x;//x => 5

圖解func函數(shù)的this指向什么的解析圖如下圖所示:

例3:

var point = { 
    x : 0, 
    y : 0, 
    moveTo : function(x, y) { 
    // 內(nèi)部函數(shù)
        var moveX = function(x) { 
            this.x = x;//this 指向什么?window
        }; 
    // 內(nèi)部函數(shù)
        var moveY = function(y) { 
            this.y = y;//this 指向什么?window
        }; 
    moveX(x); 
    moveY(y); 
    } 
}; 
point.moveTo(1,1); 
point.x; //=>0 
point.y; //=>0 
x; //=>1 
y; //=>1

說(shuō)明:
point.moveTo(1,1)函數(shù)實(shí)際內(nèi)部調(diào)用的是moveX()和moveY()函數(shù), moveX()函數(shù)內(nèi)部的this在 “JavaScript this決策樹(shù)“中進(jìn)行判定的過(guò)程是這樣的:
1)moveX(1)函數(shù)調(diào)用是用new進(jìn)行調(diào)用的么?這個(gè)明顯不是,進(jìn)入“否”分支,即函數(shù)是否用dot(.)進(jìn)行調(diào)用?;
2)moveX(1)函數(shù)不是用dot(.)進(jìn)行調(diào)用的,即進(jìn)入“否”分支,即這里的this指向全局變量window,那么this.x實(shí)際上就是window.x;

例4.作為構(gòu)造函數(shù)調(diào)用的例子:

function Point(x,y){ 
    this.x = x; // this ?
    this.y = y; // this ?
}
var np=new Point(1,1);
np.x;//1
var p=Point(2,2);
p.x;//error, p是一個(gè)空對(duì)象undefined
window.x;//2

說(shuō)明:
Point(1,1)函數(shù)在var np=new Point(1,1)中的this在 “JavaScript this決策樹(shù)“中進(jìn)行判定的過(guò)程是這樣的:
1)var np=new Point(1,1)調(diào)用是用new進(jìn)行調(diào)用的么?這個(gè)明顯是,進(jìn)入“是”分支,即this指向np;
2)那么this.x=1,即np.x=1;
Point(2,2)函數(shù)在var p= Point(2,2)中的this在 “JavaScript this決策樹(shù)“中進(jìn)行判定的過(guò)程是這樣的:
1)var p= Point(2,2)調(diào)用是用new進(jìn)行調(diào)用的么?這個(gè)明顯不是,進(jìn)入“否”分支,即函數(shù)是否用dot(.)進(jìn)行調(diào)用?;
2)Point(2,2)函數(shù)不是用dot(.)進(jìn)行調(diào)用的?判定為否,即進(jìn)入“否”分支,即這里的this指向全局變量window,那么this.x實(shí)際上就是window.x;
3)this.x=2即window.x=2.

例5.用call 和apply進(jìn)行調(diào)用的例子:

function Point(x, y){ 
    this.x = x; 
    this.y = y; 
    this.moveTo = function(x, y){ 
        this.x = x; 
        this.y = y; 
    }; 
} 
var p1 = new Point(0, 0); 
var p2 = {x: 0, y: 0}; 
p1.moveTo.apply(p2, [10, 10]);//apply實(shí)際上為p2.moveTo(10,10)
p2.x//10

說(shuō)明:
apply 和 call 這兩個(gè)方法允許切換函數(shù)執(zhí)行的上下文環(huán)境(context),即 this 綁定的對(duì)象。
p1.moveTo.apply(p2,[10,10])實(shí)際上是p2.moveTo(10,10)。那么p2.moveTo(10,10)可解釋為:
1)p2.moveTo(10,10)函數(shù)調(diào)用是用new進(jìn)行調(diào)用的么?這個(gè)明顯不是,進(jìn)入“否”分支,即函數(shù)是否用dot(.)進(jìn)行調(diào)用?;
2)p2.moveTo(10,10)函數(shù)是用dot(.)進(jìn)行調(diào)用的,即進(jìn)入“是”分支,即這里的this指向p2.moveTo(10,10)中.之前的對(duì)象p2,所以p2.x=10;

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

轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/78973.html

相關(guān)文章

  • JS this指向

    摘要:當(dāng)碰到時(shí)呵呵再看一個(gè)呵呵再來(lái)呵呵呵呵呵呵呵呵什么意思呢如果返回值是一個(gè)對(duì)象,那么指向的是構(gòu)造函數(shù)的實(shí)例但是并沒(méi)有被返回,如果返回值不是一個(gè)對(duì)象那么還是指向構(gòu)造函數(shù)創(chuàng)建的實(shí)例。 為什么要學(xué)習(xí)this?如果你學(xué)過(guò)面向?qū)ο缶幊蹋悄憧隙ㄖ栏墒裁从玫?,如果你沒(méi)有學(xué)過(guò),那么暫時(shí)可以不用看這篇文章,當(dāng)然如果你有興趣也可以看看,畢竟這是js中必須要掌握的東西。 1. this指向調(diào)用他的對(duì)象 首先...

    KavenFan 評(píng)論0 收藏0
  • JS this 關(guān)鍵字詳解

    摘要:首先,必須搞清楚在里面,函數(shù)的幾種調(diào)用方式普通函數(shù)調(diào)用作為方法來(lái)調(diào)用作為構(gòu)造函數(shù)來(lái)調(diào)用使用方法來(lái)調(diào)用方法箭頭函數(shù)但是不管函數(shù)是按哪種方法來(lái)調(diào)用的,請(qǐng)記住一點(diǎn)誰(shuí)調(diào)用這個(gè)函數(shù)或方法關(guān)鍵字就指向誰(shuí)。 本文主要解釋在JS里面this關(guān)鍵字的指向問(wèn)題(在瀏覽器環(huán)境下)。 首先,必須搞清楚在JS里面,函數(shù)的幾種調(diào)用方式: 普通函數(shù)調(diào)用 作為方法來(lái)調(diào)用 作為構(gòu)造函數(shù)來(lái)調(diào)用 使用apply/call...

    zoomdong 評(píng)論0 收藏0
  • JSthis關(guān)鍵字改變指向三種方法(apply、call、bind)

    摘要:函數(shù)的幾種調(diào)用方式普通函數(shù)調(diào)用作為方法來(lái)調(diào)用作為構(gòu)造函數(shù)來(lái)調(diào)用使用方法來(lái)調(diào)用方法箭頭函數(shù)但是不管函數(shù)是按哪種方法來(lái)調(diào)用的,都需要記住一點(diǎn)誰(shuí)調(diào)用這個(gè)函數(shù)或方法關(guān)鍵字就指向誰(shuí)。作為構(gòu)造函數(shù)來(lái)調(diào)用構(gòu)造函數(shù)出來(lái)的實(shí)例,指向這個(gè)實(shí)例對(duì)象。 首先,了解一下this關(guān)鍵字。this關(guān)鍵字就涉及到函數(shù)調(diào)用的內(nèi)容。函數(shù)的幾種調(diào)用方式: 1 普通函數(shù)調(diào)用2 作為方法來(lái)調(diào)用3 作為構(gòu)造函數(shù)來(lái)調(diào)用4 使用ap...

    shiina 評(píng)論0 收藏0
  • 詳解js和jquery里this關(guān)鍵字

    摘要:出于這個(gè)原因,該函數(shù)返回的,所以在這里指的是,所以返回的是第一個(gè)說(shuō)明關(guān)鍵字通常在對(duì)象的構(gòu)造函數(shù)中使用,用來(lái)引用對(duì)象。重寫(xiě)無(wú)法重寫(xiě),因?yàn)樗且粋€(gè)關(guān)鍵字。結(jié)論,表示當(dāng)前的上下文對(duì)象是一個(gè)對(duì)象,可以調(diào)用對(duì)象所擁有的屬性,方法。 在《javaScript語(yǔ)言精粹》這本書(shū)中,把 this 出現(xiàn)的場(chǎng)景分為四類(lèi),簡(jiǎn)單的說(shuō)就是: 有對(duì)象就指向調(diào)用對(duì)象 沒(méi)調(diào)用對(duì)象就指向全局對(duì)象 用new構(gòu)造就指向新對(duì)...

    LoftySoul 評(píng)論0 收藏0
  • 前端js -- this指向總結(jié)。

    摘要:面向?qū)ο缶幊讨赶蛞???偨Y(jié)的值要等到代碼真正執(zhí)行是才能確定。,調(diào)用,只想我們指定的對(duì)象后續(xù)更新。對(duì)象調(diào)用,如執(zhí)行,指向。默認(rèn)的,指向全局變量。特殊雖然也是對(duì)象,但是在這里還是指向那個(gè)函數(shù)的實(shí)例,因?yàn)楸容^特殊。 面向?qū)ο缶幊?--- this指向 一。首先:, this的指向在函數(shù)定義的時(shí)候是確定不了的,只有函數(shù)執(zhí)行的時(shí)候才能確定this到底指向誰(shuí),實(shí)際上this的最...

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

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

0條評(píng)論

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