全局環(huán)境下非嚴(yán)格模式this指向的window,而嚴(yán)格模式下this指向的是undefined谁榜,嚴(yán)格模式這里就不解釋了幅聘。
在函數(shù)定義里面使用this的時(shí)候我們是無(wú)法確定this指向誰(shuí)的,只有在函數(shù)執(zhí)行的時(shí)候才可以確定此時(shí)函數(shù)里面的this的指向誰(shuí)窃植,為什么這么說(shuō)呢帝蒿,網(wǎng)上大致的說(shuō)法就是this指向調(diào)用的那個(gè)對(duì)象,因此this指向總給初學(xué)者一種琢磨不透高深莫測(cè)的感覺(jué)巷怜!
例子demo.html
var obj = {
name: '小明',
fn: function () {
console.log('this:obj=>', this.name)
},
}
obj.fn() //小明 此時(shí)this指向 _obj
function text() {
var names = '孫悟空'
console.log('this:text=>', this.names);
}
text() // undefined 此時(shí)this指向window
此時(shí)this最簡(jiǎn)單的理解就是誰(shuí)調(diào)用的就指向誰(shuí)(說(shuō)法不是很正確葛超,但是這么說(shuō)就比較容易理解)
例子demo.html
var obj2 = {
name: '小紅',
fn: function () {
console.log('this:obj2=>', this.name);
}
}
window.obj2.fn() //小紅 此時(shí)this指向_obj2
這時(shí)候你可能在想this不是應(yīng)該指向window嗎,剛剛上面說(shuō)的其實(shí)是可以推翻的延塑,那只是為了更好的理解绣张。
在函數(shù)內(nèi)部調(diào)用this的話都說(shuō)指向上一層的對(duì)象,如果實(shí)在全局調(diào)用this那么它就指向window
例子demo.html
var obj3 = {
name: '豬八戒',
_obj: {
_objzbj: {
fn: function () {
console.log('this:obj3=>', this.name);
}
}
}
}
obj3._obj._objzbj.fn() //undefined 此時(shí)this指向上一層的_objzbj也就是obj3._obj._objzbj這個(gè)對(duì)象
還有一種特殊情況demo.html
var obj4 = {
names: '豬八戒',
fn: function () {
console.log('this:obj4=>', this.names);
}
}
obj4.fn() // 豬八戒 此時(shí)this指向上一層的obj4也就是obj3這個(gè)對(duì)象
var objzbj = obj4.fn
objzbj() // 豬八戒 此時(shí)this指向window
當(dāng)把obj4.fn賦值給objzbj的時(shí)候是把一個(gè)函數(shù)賦值給了這個(gè)變量关带,而這個(gè)objzbj的上一層對(duì)象指向的就是window
說(shuō)了這么多相信你對(duì)this也有一定的理解了侥涵,以上就是我自己本人對(duì)this的一些理解有什么不對(duì)的請(qǐng)大佬指正,謝謝宋雏!