js中this的四大绑定规则

四大绑定规则

  1. new绑定:

    var a = 1;
    function Person(a){
    	this.a = a;
    	console.log(this.a);
    }
    const p = new Person(2); // 2
    console.log(p.a); // 2
    
  2. 显式绑定:callapplybind

    var a = 'window';
    var obj1 = {
    	a:1,
    	test:function(){
    		console.log(this.a);
    	}
    };
    var obj2 = {
    	a:2,
    };
    obj1.test(); // 1
    obj1.test.call(obj2); // 2
    
  3. 隐式绑定:

    var a = 'window';
    var obj = {
    	a:1,
    	test:function(){
    		console.log(this.a);
    	}
    };
    obj.test(); // 1
    

    注意:定时器和延时器的this指向window

    var a = 'window';
    setTimeout(function() {
    	console.log(this.a);
    }, 2000)
    

    2秒后打印windowsetTimeout的执行其实是省略了window.setTimeout;但是回调函数是箭头函数那么this指向就是setTimeout执行所在的作用域,如下:

    const obj1 = {
    	a: 1,
    	test(){
    		setTimeout(function () { console.log(this.a); }, 1000)
    	}
    }
    obj1.test(); // undefined
    const obj2 = {
      a: 2,
      test() {
        setTimeout(() => { console.log(this.a); }, 1000);
      },
    };
    obj2.test(); // 2
    
  4. 默认绑定:

    // 在非严格模式下
    var a = 'window';
    function test() {
    	console.log(this.a);
    }
    test(); // window
    // 在严格模式下
    var b = 'window';
    function testNext() {
    	console.log(this.b);
    }
    testNext(); // undefined
    

    非严格模式下this指向window严格模式下this指向一个空对象({});

总结: 四个规则优先级为:new => 显式 => 隐式 => 默认,函数this的确定是函数谁调用this就指向谁;注意一点,箭头函数是独立于这四个规则之外的;

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值