JavaScript 之 this 详解

JS函数中的this是在调用时被绑定的,this所绑定的对象取决于函数的调用位置
首先确定函数的调用位置,然后判断需要应用下面四条规则中的哪一条。
  1. 默认绑定
    独立函数调用:

    function foo() {
    	console.log( this.a );
    }
    var a = 2;
    foo(); // 2
    

    foo函数直接使用,不带任何修饰,此时,应用默认绑定规则,this指向全局对象。
    · 注意如果是严格模式,this将会绑定到undefined,因为全局对象无法使用默认绑定。

  2. 隐式绑定
    调用位置是否有上下文对象,或者说是否被某个对象所“拥有”或“包含“。

    function foo() {
    	console.log( this.a );
    }
    var obj = {
    	a: 2,
    	foo: foo
    };
    obj.foo(); // 2
    

    foo函数的调用位置使用obj上下文来引用函数。当函数引用有上下文对象时,隐式绑定会把函数调用中的this绑定到这个上下文对象。

  3. 显式绑定
    通过call()、apply()、bind()方法直接指定this的绑定对象,这种方式称为显示绑定。

    function foo() {
    	console.log( this.a );
    }
    var obj = {
    	a:2
    };
    foo.call( obj ); // 2
    
  4. new绑定
    使用new调用函数,会自动执行下面的操作:

    1. 创建一个全新的对象
    2. 对新对象执行原型连接
    3. 将函数调用中的this绑定到该对象
    4. 如果函数没有返回其他对象,new表达式中的函数调用会自动返回这个新对象。
规则优先级

new绑定 > 显示绑定 > 隐式绑定 > 默认绑定

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值