溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

JS之this那些事

發布時間:2020-08-04 05:02:58 來源:網絡 閱讀:379 作者:wantingyun 欄目:網絡安全

一直以來,對this的討論都是熱門話題。有人說掌握了this就掌握了JavaScript的80%,說法有點夸張,但可見this的重要性。至今記錄了很多關于this的零碎筆記,今天就來個小結。

  本人看過對this解釋的最簡單的說法:誰調用這個函數,this指向誰。 好啦,就是這么簡單。下面再來具體說一下,請隨時用這個說法去驗證。

  先來看一道js面試題熱熱身:

JS之this那些事

var obj = {
  foo: function(){
    console.log(this)
  }
} 
var bar = obj.foo
obj.foo() //  objbar() //  window

JS之this那些事

  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調用該對象屬性。

JS之this那些事

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           }
      },
};

JS之this那些事

 

2、如果函數通過new調用,那么就會創建一個對象,并且this 指向新創建的對象。    

JS之this那些事

function Foo(){     //var this=new Object();函數內部隱式默認創建this對象并返回this
     this.name="foo";     //return this;}var obj=new Foo();  //將返回的this賦給objconsole.log(obj.name);// foo

JS之this那些事

 

3、setTimeOut、setInterval函數中的this指向window。

4、通過apply或call調用時,this會動態改變它的指向。這倆種方法都接受倆個參數,第一個都是調用這個函數的對象。用法:functionNmae.apply(調用的對象,參數2)。

5、通過bind()調用時,這個與前面兩個用法差不多,只不過bind()靜態綁定this,一旦綁定了就不會改變,即使用call或apply也沒用,同時返回一個函數體待執行


向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女