this對象的指向

1.函數中:function foo(){

               return this;

}

函數調用者是誰,就指向誰;直接調用指向window;

2.事件中:html事件中,指向window;dom0事件中,指向事件的觸發者(綁定元素的節點);dom2事件中,非IE中指向綁定的元素節點;IE中直接指向window;

3.閉包中:this指向window;

4.對象中:this指向當前對象;如果有多級對象包裹,指代上一級對象;
     ( 1). var foo = {

               a:18,
               num:{
                   a:10,
                   num:function(){

                           console.log(this.a);//10

                   }
               }

       }
  foo.num.num();

(2).
       var foo = {

               a:18,
               num:{
                   num:function(){

                           console.log(this.a);//undefined

                   }
               }

       }
  foo.num.num();


5.call函數和apply函數能改變this的指向,bind函數也能改變函數指向;

關於更多改變函數指向問題,請觀看博客:http://www.cnblogs.com/pssp/p/5215621.html;

6.構造函數模塊:

有坑之處,請讀博客:http://www.cnblogs.com/pssp/p/5216085.html#

總結:構造函數中,返回值是基本數據類型,那麼this指向構造函數的實例;返回值是對象則this指向該對象;

 function Foo(){

           this.user = 'my';
           return {};
       }
       var na = new Foo();
       console.log(na.user);//返回值undefined;

 function Foo(){

           this.user = 'my';
           return 1;
       }
       var na = new Foo();
       console.log(na.user);//返回值my

基本實例(this的指向):



結果:


this的指向問題:前兩個是基本數據類型,this指向實例,所以返回基本數據類型;

後面三個數據類型都是對象,故this指向他們自己本身,this指向數組,而數組中的屬性是下標值分別爲01234等等,故沒有name屬性,會返回undefined;對象中可以自定義屬性,而本題給的是空對象,也沒有name屬性,也會返回undefined;null屬於基本數據類型,故會指向實例,返回null;

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