彻底玩转this指向

四个常规、一个特殊

四个常规:
1.new绑定
function foo(a) {
 this.a = a
}
var bar = new foo(2)
console.log(bar.a) //2

使用new调用的函数,则其中this将会被绑定到那个新构造的对象。

2.显式绑定
let web = { webName: "蚂蚁部落" };
function fn() {
  console.log(this);
}
fn();   //window
fn.call(web);   //{ webName: "蚂蚁部落" }

强行改变this指向,函数this指向bind、apply或call方法调用时的第一个参数。这三种传参方式不同。

3.隐式绑定
var o = {
  a: 10,
  b: {
    a: 12,
    fn: function () {
      console.log(this); 
    }
  }
}
o.b.fn();
c = o.b.fn;//12
c();//window

函数作为对象中的一个属性,成为该对象的一个方法,this指向该对象(最常见的最后谁调用指向谁)

4.默认绑定
function a(){
    var author = "lry";
    console.log(this.author); //undefined
    console.log(this); //Window
}
a(); //其实这是相当于 window.a()

严格模式下指向undefined,正常模式下指向window

一个特殊:
箭头函数
let obj = {
	foo: () => {
	  console.log(this) //window
	}
}
obj.foo()

this在箭头函数创建时确定,它与声明所在的上下文相同。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值