This

本文不繫統講解,只解釋幾個特殊例子。

<script>
    var obj={
        name:"mao",
        ftn00:(function(){
          console.log(this);
        })(),
        ftn01:function(){
          console.log(this);
          return function(){
            console.log(this);
          }
        },//普通
        ftn02:(function(){
          console.log(this);
          return function(){
            console.log(this);
          }
        })()//自調用
      }
</script>

請看準上面的對象及他的屬性,下面即將襲來一大波花式調用:

console.log(obj.ftn00);//undefined

window在定義obj時就調用了自調用函數,返回undefined。

obj.ftn01();
obj.ftn01()();

1)obj調用自己的方法,this肯定爲obj
2)第一個括號調用完這個函數就已經結束了,然後返回的匿名函數由window來調用

var ff=obj.ftn01;//此時ff相當於是window的一個屬性
ff();
ff()();

1)window調用自己的屬性
2)同理,匿名函數由window來調用

obj.ftn02();

此時ftn02屬性的值已經是那個返回的函數,所以對象調用自己的屬性方法,this爲這個對象。

var f=obj.ftn02;
      f();//window的屬性

window調用自己的屬性。

總結:看this主要看是誰調用了這個方法。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章