中文字幕在线观看,亚洲а∨天堂久久精品9966,亚洲成a人片在线观看你懂的,亚洲av成人片无码网站,亚洲国产精品无码久久久五月天

說一說這“this”

2018-07-20    來源:編程學習網(wǎng)

容器云強勢上線!快速搭建集群,上萬Linux鏡像隨意使用

JS中不容易懂的概念除了閉包之外,還有一個應(yīng)該是首當其沖:this ,這個東西經(jīng)常讓人搞混,那么今天我們就來好好看看它的廬山真面目。

定義一個對象:

var Charles = {
    living: true,
    age:23,
    gender:male,
    getGender:function(){ return Charles.gender;
    }
}; console.log(Charles.getGender()); //輸出:male

下面的代碼有一樣的效果:

var Charles = {
    living: true,
    age:23,
    gender:male,
    getGender:function(){ return this.gender; //注意“this” }
}; console.log(Charles.getGender()); //輸出:male

那么,this究竟在代碼里指代的是什么?我們該怎么分析,因為在具體的環(huán)境里有時很難分清this指代的真面目。那么,現(xiàn)在,需要記住一句話:
當this值的宿主函數(shù)被封裝在另一個函數(shù)里面,或者在另一個函數(shù)的上下文中被調(diào)用時,this值永遠是對全局(head/window)對象的引用
也就是說,this值在嵌套函數(shù)里面,對于ES5永遠指向window。

var myObject = {
    myProperty: 'I can see the light',
    myMethod: function(){ var that = this; console.log(this); //輸出:'Object(這里是myObject)' var helperFunction = function(){ console.log(that.myProperty); // 輸出'I can see the light' console.log(this); //如果不使用`that`,則輸出'window',因為是在嵌套函數(shù)里面 }(); //立即執(zhí)行 }
}
myObject.myMethod(); //調(diào)用 myMethod

結(jié)合上面的那句話,對于ES5來說,this也就是這個情況:

var myObject = {
    func1: function(){ console.log(this); //輸出 'Object'(第一層函數(shù)) var func2= function(){ console.log(this); //從此處開始,this都是window(第二層函數(shù)) var func3= function(){ console.log(this); //當然是window }();
        }();
    }
}
myObject.func1();

如圖

到這里,應(yīng)該明白了this在JS中的位置,相信以后不會再分不清楚了。


文/Charles_ln(簡書作者)
原文鏈接:http://www.jianshu.com/p/847fc5599d3d

標簽: 代碼

版權(quán)申明:本站文章部分自網(wǎng)絡(luò),如有侵權(quán),請聯(lián)系:west999com@outlook.com
特別注意:本站所有轉(zhuǎn)載文章言論不代表本站觀點!
本站所提供的圖片等素材,版權(quán)歸原作者所有,如需使用,請與原作者聯(lián)系。

上一篇:Spring Boot工程結(jié)構(gòu)推薦

下一篇:iOS程序員必看之熱門書單