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

資訊專欄INFORMATION COLUMN

面對對象(四)對象的方法中this

Betta / 2994人閱讀

摘要:但是,下面這幾種用法,都會改變的指向。情況一情況二情況三上面代碼中,就是一個值。等同于上面代碼中,是多層對象內(nèi)部的一個方法。為求簡便,將其賦值給變量,結(jié)果調(diào)用時,指向了頂層對象。

var obj ={
foo: function () {

console.log(this);

}
};

obj.foo() // obj
上面代碼中,obj.foo方法執(zhí)行時,它內(nèi)部的this指向obj。
但是,下面這幾種用法,都會改變this的指向。

// 情況一
(obj.foo = obj.foo)() // window
// 情況二
(false || obj.foo)() // window
// 情況三
(1, obj.foo)() // window
上面代碼中,obj.foo就是一個值。這個值真正調(diào)用的時候,運行環(huán)境已經(jīng)不是obj了,而是全局環(huán)境,所以this不再指向obj。

可以這樣理解,JavaScript 引擎內(nèi)部,obj和obj.foo儲存在兩個內(nèi)存地址,稱為地址一和地址二。obj.foo()這樣調(diào)用時,是從地址一調(diào)用地址二,因此地址二的運行環(huán)境是地址一,this指向obj。但是,上面三種情況,都是直接取出地址二進行調(diào)用,這樣的話,運行環(huán)境就是全局環(huán)境,因此this指向全局環(huán)境。上面三種情況等同于下面的代碼。

上面三種情況等同于下面的代碼。

// 情況一
(obj.foo = function () {
console.log(this);
})()
// 等同于
(function () {
console.log(this);
})()

// 情況二
(false || function () {
console.log(this);
})()

// 情況三
(1, function () {
console.log(this);
})()

2.this所在的方法不在對象的第一層(一個函數(shù)一層)

這時this只是指向當前一層的對象,而不會繼承更上面的層

var a = {
p: "Hello",
b: {

m: function() {
  console.log(this.p);
}

}
};

a.b.m() // undefined
上面代碼中,a.b.m方法在a對象的第二層,該方法內(nèi)部的this不是指向a,而是指向a.b,因為實際執(zhí)行的是下面的代碼。

var b = {
m: function() {
console.log(this.p);
}
};

var a = {
p: "Hello",
b: b
};

(a.b).m() // 等同于 b.m()

var a = {
b: {

m: function() {
  console.log(this.p);
},
p: "Hello"

}
};

var hello = a.b.m;
hello() // undefined
上面代碼中,m是多層對象內(nèi)部的一個方法。為求簡便,將其賦值給hello變量,結(jié)果調(diào)用時,this指向了頂層對象。為了避免這個問題,可以只將m所在的對象賦值給hello,這樣調(diào)用時,this的指向就不會變。

var hello = a.b;
hello.m() // Hello

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

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

相關(guān)文章

  • 面對對象對象方法this

    摘要:但是,下面這幾種用法,都會改變的指向。情況一情況二情況三上面代碼中,就是一個值。等同于上面代碼中,是多層對象內(nèi)部的一個方法。為求簡便,將其賦值給變量,結(jié)果調(diào)用時,指向了頂層對象。 var obj ={ foo: function () { console.log(this); }}; obj.foo() // obj上面代碼中,obj.foo方法執(zhí)行時,它內(nèi)部的this指向obj。但...

    1fe1se 評論0 收藏0
  • 面對對象編程

    摘要:也就是說,構(gòu)造函數(shù)內(nèi)部,指的是一個新生成的空對象,所有針對的操作,都會發(fā)生在這個空對象上。上面代碼中,構(gòu)造函數(shù)的語句,返回的是一個新對象。 一、創(chuàng)建對象 1.構(gòu)造函數(shù)var Vehicle = function () { this.price = 1000;}; var v = new Vehicle();v.price // 1000 new命令本身就可以執(zhí)行構(gòu)造函數(shù),所以后面的構(gòu)...

    leeon 評論0 收藏0
  • 原生 js 實現(xiàn)面對對象版瀑布流

    摘要:一一些閑話作為一個寫靜態(tài)的切圖仔,其實日常工作中根本用不上瀑布流這種小清新,畢竟營銷頁面都是要求搶眼吸睛高大上文案爸爸說啥都對。昨上午閑著沒事看到別人寫的瀑布流的帖子,覺得很好玩的樣子,然后決定上午就寫一個試試。。。 一、一些閑話 作為一個寫靜態(tài)的切圖仔,其實日常工作中根本用不上瀑布流這種小清新,畢竟營銷頁面都是要求 搶眼__、__吸睛__、 __高大上 (文案爸爸說啥都對)。 昨上...

    tommego 評論0 收藏0
  • 面對對象(三)this 關(guān)鍵字

    摘要:涵義實質(zhì)使用場合使用注意點避免多層避免數(shù)組處理方法中的避免回調(diào)函數(shù)中的綁定的方法參考鏈接涵義就是屬性或方法當前所在的對象。上面代碼是一個文本輸入框,每當用戶輸入一個值,就會調(diào)用回調(diào)函數(shù),驗證這個值是否在指定范圍。 涵義實質(zhì)使用場合使用注意點避免多層 this避免數(shù)組處理方法中的 this避免回調(diào)函數(shù)中的 this綁定 this 的方法 Function.prototype.call...

    shenhualong 評論0 收藏0
  • 面對對象(三)this 關(guān)鍵字

    摘要:涵義實質(zhì)使用場合使用注意點避免多層避免數(shù)組處理方法中的避免回調(diào)函數(shù)中的綁定的方法參考鏈接涵義就是屬性或方法當前所在的對象。上面代碼是一個文本輸入框,每當用戶輸入一個值,就會調(diào)用回調(diào)函數(shù),驗證這個值是否在指定范圍。 涵義實質(zhì)使用場合使用注意點避免多層 this避免數(shù)組處理方法中的 this避免回調(diào)函數(shù)中的 this綁定 this 的方法 Function.prototype.call...

    Euphoria 評論0 收藏0

發(fā)表評論

0條評論

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