亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專欄INFORMATION COLUMN

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

Betta / 3064人閱讀

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

var obj ={
foo: function () {

console.log(this);

}
};

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

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

可以這樣理解,JavaScript 引擎內(nèi)部,obj和obj.foo儲(chǔ)存在兩個(gè)內(nèi)存地址,稱為地址一和地址二。obj.foo()這樣調(diào)用時(shí),是從地址一調(diào)用地址二,因此地址二的運(yùn)行環(huán)境是地址一,this指向obj。但是,上面三種情況,都是直接取出地址二進(jìn)行調(diào)用,這樣的話,運(yùn)行環(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所在的方法不在對(duì)象的第一層(一個(gè)函數(shù)一層)

這時(shí)this只是指向當(dāng)前一層的對(duì)象,而不會(huì)繼承更上面的層

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

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

}
};

a.b.m() // undefined
上面代碼中,a.b.m方法在a對(duì)象的第二層,該方法內(nèi)部的this不是指向a,而是指向a.b,因?yàn)閷?shí)際執(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是多層對(duì)象內(nèi)部的一個(gè)方法。為求簡(jiǎn)便,將其賦值給hello變量,結(jié)果調(diào)用時(shí),this指向了頂層對(duì)象。為了避免這個(gè)問題,可以只將m所在的對(duì)象賦值給hello,這樣調(diào)用時(shí),this的指向就不會(huì)變。

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

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

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

相關(guān)文章

  • 面對(duì)對(duì)象對(duì)象方法this

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

    1fe1se 評(píng)論0 收藏0
  • 面對(duì)對(duì)象編程

    摘要:也就是說,構(gòu)造函數(shù)內(nèi)部,指的是一個(gè)新生成的空對(duì)象,所有針對(duì)的操作,都會(huì)發(fā)生在這個(gè)空對(duì)象上。上面代碼中,構(gòu)造函數(shù)的語句,返回的是一個(gè)新對(duì)象。 一、創(chuàng)建對(duì)象 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 評(píng)論0 收藏0
  • 原生 js 實(shí)現(xiàn)面對(duì)對(duì)象版瀑布流

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

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

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

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

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

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

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

0條評(píng)論

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