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

資訊專欄INFORMATION COLUMN

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

1fe1se / 1647人閱讀

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

var obj ={
foo: function () {

console.log(this);

}
};

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

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

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

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

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

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

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

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

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

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

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

}
};

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

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是多層對象內部的一個方法。為求簡便,將其賦值給hello變量,結果調用時,this指向了頂層對象。為了避免這個問題,可以只將m所在的對象賦值給hello,這樣調用時,this的指向就不會變。

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

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/105686.html

相關文章

  • 面對對象對象方法this

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

    Betta 評論0 收藏0
  • 面對對象編程

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

    leeon 評論0 收藏0
  • 原生 js 實現面對對象版瀑布流

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

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

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

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

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

    Euphoria 評論0 收藏0

發表評論

0條評論

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