javaScript this 詳解

在實際應用中,this的指向大體能夠分爲如下四種。函數

#   做爲對象的方法調用this

#   做爲普通函數調用時spa

#   構造器調用。對象

1.做爲對象的方法調用,this指向該對象get

  當函數做爲對象的方法被調用時,this指向該對象;io

例子:  console

 var obj={function

        a:1,方法

        getA:function(){數據

             alert(this===obj);//輸出 :true;  this 指向obj

              alert(this.a);//輸出1;

         }

    }

   obj.getA();

 

  當  函數(getA) 做爲對象(obj)的方法被調用時,this指向該對象;

2.做爲普通函數調用時,this的指向;

  當函數不做爲對象的屬性被調用時,也就是咱們一般所說的普通函數方式,此時的this老是指向全局對象。

例子:

    window.name='globalName';

    var getName=function(){

        return this.name;//這裏的this指向的  window(全局對象)

    }

    console.log(getName())//輸出‘globalName’

  或者:

    window.name='globalName';

 

    var myObject={

 

        name:'sven',

        getName:function(){

           return this.name; 

        }

 

    }

 

var getName=myObject.getName;

myObject.getName()//輸出sven

console.log(getName());//輸出globalName

3.構造器調用。

構造器的外表跟普通函數如出一轍,他們的區別在於被調用的方式,當用new運算符調用函數時,該函數總會返回一個對象,一般狀況下,構造器裏的this就指向返回的這個對象:

 var MyClass = function(){

    this.name='sven';

}

var obj = new MyClass();

alert(obj.name)//輸出sven

這裏須要注意的是:若是構造器返回了一個Object類型的對象,那麼,這次的運算結果最終會返回這個對象,而不是咱們以前期待的this

 

var MyClass = function(){

 

    this.name='sven';

    return {

     name:'anne'  //返回的是一個對象: {name:'anne'}

  }

 

}

 

var obj = new MyClass();

 

alert(obj.name)//輸出anne

若是構造器不顯示地返回任何數據,或者是一個非對象類型的數據,就不會形成上訴問題

相關文章
相關標籤/搜索