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特殊
相关文章
相关标签/搜索