一直以來(lái),對(duì)this的討論都是熱門(mén)話題。有人說(shuō)掌握了this就掌握了JavaScript的80%,說(shuō)法有點(diǎn)夸張,但可見(jiàn)this的重要性。至今記錄了很多關(guān)于this的零碎筆記,今天就來(lái)個(gè)小結(jié)。

本人看過(guò)對(duì)this解釋的最簡(jiǎn)單的說(shuō)法:誰(shuí)調(diào)用這個(gè)函數(shù),this指向誰(shuí)。 好啦,就是這么簡(jiǎn)單。下面再來(lái)具體說(shuō)一下,請(qǐng)隨時(shí)用這個(gè)說(shuō)法去驗(yàn)證。
先來(lái)看一道js面試題熱熱身:

var obj = {
foo: function(){
console.log(this)
}
}
var bar = obj.foo
obj.foo() // objbar() // window
obj.foo()套用“誰(shuí)調(diào)用指向誰(shuí)”的說(shuō)法就很好理解了,但bar()為啥是window。其實(shí),這個(gè)也是可以套用這個(gè)簡(jiǎn)單的說(shuō)法。前面我們var了一個(gè)變量bar,請(qǐng)注意,這個(gè)bar是個(gè)全局變量,即bar===window.bar,并把函數(shù)obj.foo賦給bar,此時(shí)直接調(diào)用bar(),就等于window.bar()。這樣就好理解了,這個(gè)函數(shù)就是window調(diào)用的,沒(méi)毛病了。關(guān)于這道題的解釋?zhuān)部梢詤⒖歼@篇文章:http://mp.weixin.qq.com/s/ksqtCd8ouxU-cVc_HnA4Aw
牢記這句話:“誰(shuí)調(diào)用指向誰(shuí)”,搞清誰(shuí)調(diào)用的,解決大部分的this問(wèn)題足夠了。下面說(shuō)幾個(gè)this的特殊情況:
1、函數(shù)被具體對(duì)象調(diào)用時(shí),指向直接調(diào)用者。如果這個(gè)函數(shù)里面嵌套有函數(shù),里面函數(shù)的this不會(huì)指向這個(gè)調(diào)用者,可通過(guò)that=this改變指向。內(nèi)部函數(shù)用that調(diào)用該對(duì)象屬性。

var name="out";var obj={
name:"in",
outFoo:function(){ var that=this;//將this賦給that,內(nèi)部函數(shù)的that指向obj
function inFoo(){ this.name; // out,此時(shí)this指向window
that.name; // in,此時(shí)that指向obj }
},
};
2、如果函數(shù)通過(guò)new調(diào)用,那么就會(huì)創(chuàng)建一個(gè)對(duì)象,并且this 指向新創(chuàng)建的對(duì)象。

function Foo(){ //var this=new Object();函數(shù)內(nèi)部隱式默認(rèn)創(chuàng)建this對(duì)象并返回this
this.name="foo"; //return this;}var obj=new Foo(); //將返回的this賦給objconsole.log(obj.name);// foo
3、setTimeOut、setInterval函數(shù)中的this指向window。
4、通過(guò)apply或call調(diào)用時(shí),this會(huì)動(dòng)態(tài)改變它的指向。這倆種方法都接受倆個(gè)參數(shù),第一個(gè)都是調(diào)用這個(gè)函數(shù)的對(duì)象。用法:functionNmae.apply(調(diào)用的對(duì)象,參數(shù)2)。
5、通過(guò)bind()調(diào)用時(shí),這個(gè)與前面兩個(gè)用法差不多,只不過(guò)bind()靜態(tài)綁定this,一旦綁定了就不會(huì)改變,即使用call或apply也沒(méi)用,同時(shí)返回一個(gè)函數(shù)體待執(zhí)行
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無(wú)理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國(guó)服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡(jiǎn)單易用、服務(wù)可用性高、性?xún)r(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專(zhuān)為企業(yè)上云打造定制,能夠滿足用戶(hù)豐富、多元化的應(yīng)用場(chǎng)景需求。
文章題目:JS之this那些事-創(chuàng)新互聯(lián)
本文來(lái)源:http://www.chinadenli.net/article8/djdiop.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供定制網(wǎng)站、定制開(kāi)發(fā)、外貿(mào)建站、網(wǎng)站營(yíng)銷(xiāo)、面包屑導(dǎo)航、移動(dòng)網(wǎng)站建設(shè)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶(hù)投稿、用戶(hù)轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容