关于this的指向


一个函数中的this关键字的指向——通常情况,如果一个函数所属一个对象,那么这个函数被这个函数所属的对象调用执行,那么这个this就指向这个这个函数所属的对象


注意:函数中的this指向是在调用时(运行时)决定的,而不是在函数定义的时候决定的。




例1.

function test(){
  return this;  
}

test();            //window
window.test();     //window

这是一个函数声明,由于 test 所属于window对象,在我们调用test()的时候实际上调用test的对象是window(全局对象),所以this指向window。



例2.

var obj = {
  test:function(){
    return this;
  }
}

obj.test();  //obj

因为test所属于obj对象,并且由obj对象调用,所以this指向obj。



例3.

var obj  = {
 a:{
    test:function(){
      return this;
    }
  }
}

obj.a.test();

这里的test所属于a对象,并且由a对象调用,所以this指向a。
虽然a属于obj,但 test函数 所属于a对象,而不属于obj对象。



例4.

var test = function(callBack){
  callBack();
}

test(function(){
  console.log(this);   //window
})

这个回调函数里面的this指向window,因为这个匿名函数由参数调用,这个调用者(也就是这个参数)不所属于任何对象,所以默认的指向了window。



例5.

var test = function(){
  arguments[0]();
}

test(function(){
  console.log(this);  //arguments
})

这个是由arguments对象调用,在传递参数时js自动把传递的匿名函数挂载到了arguments对象下,所以这个匿名函数也是所属于arguments对象的,所以this指向了arguments。



例6.

var obj = {str:"1"};
var obj2 = {
  test:function(){
    return this;
  }
}
obj2.test();      //obj2

obj.Fn = obj2.test;
obj.Fn();         //obj

var temp = obj2.test;
temp();          //window
window.temp()    //window

由最终调用执行test的对象决定了test内的this的指向。



例7.(new关键字)

function test(){
  ******
  ******
 ---[[return undefined]]---   
}
Test();

如果不使用new关键字调用执行,test里面的this指向调用执行test的对象。
如果不显示的在代码里面使用return,那么这个函数内部会默认的返回undefined。

function Test(){
  ******
  ******
  ---[[return this]]---
}
var A = new Test();

如果使用new关键字调用执行,构造函数里面的this指向创建的实例对象A。
如果不显示的在代码里面使用return返回({},[],RegExp, Date, Function),那么这个构造函数内部会默认返回this(也就是创建的实例对象A)。


转载于:https://www.cnblogs.com/liu-di/p/10396083.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值