摘要:但是,下面這幾種用法,都會改變的指向。情況一情況二情況三上面代碼中,就是一個值。等同于上面代碼中,是多層對象內(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
摘要:但是,下面這幾種用法,都會改變的指向。情況一情況二情況三上面代碼中,就是一個值。等同于上面代碼中,是多層對象內(nèi)部的一個方法。為求簡便,將其賦值給變量,結(jié)果調(diào)用時,指向了頂層對象。 var obj ={ foo: function () { console.log(this); }}; obj.foo() // obj上面代碼中,obj.foo方法執(zhí)行時,它內(nèi)部的this指向obj。但...
摘要:一一些閑話作為一個寫靜態(tài)的切圖仔,其實日常工作中根本用不上瀑布流這種小清新,畢竟營銷頁面都是要求搶眼吸睛高大上文案爸爸說啥都對。昨上午閑著沒事看到別人寫的瀑布流的帖子,覺得很好玩的樣子,然后決定上午就寫一個試試。。。 一、一些閑話 作為一個寫靜態(tài)的切圖仔,其實日常工作中根本用不上瀑布流這種小清新,畢竟營銷頁面都是要求 搶眼__、__吸睛__、 __高大上 (文案爸爸說啥都對)。 昨上...
摘要:涵義實質(zhì)使用場合使用注意點避免多層避免數(shù)組處理方法中的避免回調(diào)函數(shù)中的綁定的方法參考鏈接涵義就是屬性或方法當前所在的對象。上面代碼是一個文本輸入框,每當用戶輸入一個值,就會調(diào)用回調(diào)函數(shù),驗證這個值是否在指定范圍。 涵義實質(zhì)使用場合使用注意點避免多層 this避免數(shù)組處理方法中的 this避免回調(diào)函數(shù)中的 this綁定 this 的方法 Function.prototype.call...
摘要:涵義實質(zhì)使用場合使用注意點避免多層避免數(shù)組處理方法中的避免回調(diào)函數(shù)中的綁定的方法參考鏈接涵義就是屬性或方法當前所在的對象。上面代碼是一個文本輸入框,每當用戶輸入一個值,就會調(diào)用回調(diào)函數(shù),驗證這個值是否在指定范圍。 涵義實質(zhì)使用場合使用注意點避免多層 this避免數(shù)組處理方法中的 this避免回調(diào)函數(shù)中的 this綁定 this 的方法 Function.prototype.call...
閱讀 1552·2021-11-17 09:33
閱讀 1100·2021-11-12 10:36
閱讀 2413·2019-08-30 15:54
閱讀 2441·2019-08-30 13:14
閱讀 2912·2019-08-26 14:05
閱讀 3289·2019-08-26 11:32
閱讀 3001·2019-08-26 10:09
閱讀 2995·2019-08-26 10:09