javascript中,對於this指向的淺見

# this的指向在函數建立的時候肯定不了。只有在執行的時候,才能夠肯定。數組

## 1 、 這裏的this指向window window.fn(); 因此this.user是undefinedapp

function fn (){
  var user='追夢人';
  console.log(this.user); // undefined 
  console.log(this); // window
}
fn(); 

 

## 二、誰調用,指向誰

函數

1 var o ={
2     user:'追夢人',
3     fn:function(){
4         console.log(this.user); // 誰調用,指向誰
5     }
6 }
7 o.fn();    

 


## 三、this

1 var o ={
2     user:'追夢人',
3     fn:function(){
4         console.log(this.user); // 爲何不是undefiend,是window在調用
5     }
6 }
7 window.o.fn(); // 誰調用,指向誰     

## 四、spa

 1 var o={
 2     a:10,
 3     b:{
 4         a:12,
 5         fn:function(){    
 6         console.log(this.a); // 12
 7         },
 8     },
 9 }
10 o.b.fn();    

 

  • - 若是函數中有this,可是他沒被上一級的對象所跳用,這時this指向window
  • - 若是函數中有this,而且這個函數被上一級對象所調用,這時this指向上一級的對象
  • - 若是函數中有this,並且這個函數內部有多個對象,儘管這個函數被最外層所調用,
  • - 可是this的指向也只是他的上一級對象。
  • - 嚴格模式中,this不指向window,而是undefined

## 五、 註釋掉a:12 this.a爲 undefinedcode

 1 var o={
 2     a:10,
 3     b:{
 4         //a:12,
 5         fn:function(){
 6             console.log(this.a); 
 7         },
 8     },
 9 }
10 o.b.fn();

 

  • - 儘管對象b中,沒有屬性a,可是這個this也是指向對象b,由於this只會指向
  • - 它的上一級對象,無論該對象有沒有a


## 六、this指向的永遠都是最後調用它的對象(執行的時候,誰調用)對象

 1 var o={
 2     a:10,
 3     b:{
 4         a:12,
 5         fn:function(){
 6             console.log(this.a); // undefined
 7             console.log(this); // window
 8         },
 9     },
10 }
11 var fn=o.b.fn; // 注意:這裏並無執行
12 fn(); // 執行fn
  • - 注意:雖然,函數中的fn被對象b所引用,可是在賦值的時候,並無執行,
  • - 因此最終的指向是window
  • - 上面的例子不一樣,由於上面的例子直接執行了fn()


## 七、構造函數中的thisblog

1 function Fn(){
2     this.user="追夢人";
3 }
4 var fn = new Fn();
5 console.log(fn.user);
  • - 之因此對象a能夠用函數Fn中的uesr,是由於new關鍵字改變了this的指向。
  • - new 關鍵字建立了一個對象實例, 至關於複製了一份Fn到對象a中。
  • - 此時,只是建立,沒有執行。
  • - 最後調用的是fn,那麼this指向天然是fn
  • - 首先,new關鍵字會建立一個空對象
  • - 而後會自動調用一個函數的apply方法,將this指向這個空對象,這樣函數內部的this就會被這個空對象所替代。
  • - bind apply(數組) call

## 八、構造函數 return 對象 的時候io

1 function Fn(){
2     this.user="追夢人";
3     return {} // 返回 一個對象
4 }
5 var fn = new Fn();
6 console.log(fn.user); // undefined
  • - 返回一個對象的時候,this會指向返回的對象

## 九、return 簡單類型的數據console

1 function Fn(){
2     this.user="追夢人";
3     return 1; // 返回的是一個簡單類型
4 }
5 var fn = new Fn();
6 console.log(fn.user); // 追夢人
  • - 返回簡單類型數據,this仍是指向函數的實例

## 十、return null的時候

1 function Fn(){
2     this.user="追夢人";
3     return null; // 返回的是一個簡單類型
4 }
5 var fn = new Fn();
6 console.log(fn.user); // 追夢人
  • - 注意:返回null雖然是個對象,this仍是指向函數的實例,null特殊
相關文章
相關標籤/搜索