简单明了不废话, Javascript函数中的this的指向规则

  1. 用new调用函数, this指向新创建的对象。

  2. 使用call,apply(bind)调用函数, this指向绑定的的对象。

  3. 函数作为某对象的属性调用, this指向这个对象。

  4. 其他情况下, this指向全局对象(严格模式下指向undefined)。

补充: 如果第二条规则绑定的是null或者undefined, 则执行第四条规则; 1-4条规则优先级递减。

var a = 1;
var foo1 = {
  a: 2,
  bar: function(){
    console.log(this.a)
  }
};
var foo2 = {
  a: 3
};
var baz = foo1.bar;
baz() // 1 规则4
foo1.bar() // 2 规则3
foo1.bar.call(foo2) // 3 规则2>规则3
new foo1.bar() // undefined 规则1>规则3

var baz2 = foo1.bar.bind(foo2);
new baz2() // undefined 规则1>规则2

foo1.bar.call(null) // 1 this指向global

参考:You Don't Know JS: this & Object Prototypes

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值