一直以來,對this的討論都是熱門話題。有人說掌握了this就掌握了JavaScript的80%,說法有點夸張,但可見this的重要性。至今記錄了很多關于this的零碎筆記,今天就來個小結。
網站建設哪家好,找創新互聯!專注于網頁設計、網站建設、微信開發、小程序開發、集團企業網站建設等服務項目。為回饋新老客戶創新互聯還提供了會寧免費建站歡迎大家使用!
本人看過對this解釋的最簡單的說法:誰調用這個函數,this指向誰。 好啦,就是這么簡單。下面再來具體說一下,請隨時用這個說法去驗證。
先來看一道js面試題熱熱身:
var obj = { foo: function(){ console.log(this) } } var bar = obj.foo obj.foo() // objbar() // window
obj.foo()套用“誰調用指向誰”的說法就很好理解了,但bar()為啥是window。其實,這個也是可以套用這個簡單的說法。前面我們var了一個變量bar,請注意,這個bar是個全局變量,即bar===window.bar,并把函數obj.foo賦給bar,此時直接調用bar(),就等于window.bar()。這樣就好理解了,這個函數就是window調用的,沒毛病了。關于這道題的解釋,也可以參考這篇文章:http://mp.weixin.qq.com/s/ksqtCd8ouxU-cVc_HnA4Aw
牢記這句話:“誰調用指向誰”,搞清誰調用的,解決大部分的this問題足夠了。下面說幾個this的特殊情況:
1、函數被具體對象調用時,指向直接調用者。如果這個函數里面嵌套有函數,里面函數的this不會指向這個調用者,可通過that=this改變指向。內部函數用that調用該對象屬性。
var name="out";var obj={ name:"in", outFoo:function(){ var that=this;//將this賦給that,內部函數的that指向obj function inFoo(){ this.name; // out,此時this指向window that.name; // in,此時that指向obj } }, };
2、如果函數通過new調用,那么就會創建一個對象,并且this 指向新創建的對象。
function Foo(){ //var this=new Object();函數內部隱式默認創建this對象并返回this this.name="foo"; //return this;}var obj=new Foo(); //將返回的this賦給objconsole.log(obj.name);// foo
3、setTimeOut、setInterval函數中的this指向window。
4、通過apply或call調用時,this會動態改變它的指向。這倆種方法都接受倆個參數,第一個都是調用這個函數的對象。用法:functionNmae.apply(調用的對象,參數2)。
5、通過bind()調用時,這個與前面兩個用法差不多,只不過bind()靜態綁定this,一旦綁定了就不會改變,即使用call或apply也沒用,同時返回一個函數體待執行
網頁名稱:JS之this那些事
文章源于:http://vcdvsql.cn/article22/jhpojc.html
成都網站建設公司_創新互聯,為您提供外貿網站建設、軟件開發、網站營銷、外貿建站、品牌網站建設、網站導航
聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯