JavaScript中的this详解

本文深入探讨了JavaScript中this的四种绑定规则:new绑定、显式绑定、隐式绑定和默认绑定,以及它们的优先级。通过实例解析了this如何在不同场景下指向不同的对象,强调了上下文对象对函数调用的影响,并总结了判断this绑定的顺序。
摘要由CSDN通过智能技术生成

1,this是什么?

表示当前对象的一个引用。当函数被调用时,会创建一个活动记录(执行上下文)。记录会包含 函数在哪被调用,调用方法,参数,this就是记录里的一个属性

2,this指向哪里?

this是函数被调用时发生的绑定,指向哪里完全取决于在哪里被调用。

3, 绑定规则优先级(判断顺序)

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

1 new绑定

function foo(a){
    this.a=a
}
var bar=new foo(2)
console.log(bar.a)  //2
// 会构造一个新对象并把它绑定到foo(...)调用中的this上

2,显式绑定

function foo(){
    console.log(this.a)
}
var obj={
    a:2
}
foo.call(obj)  //2     .call()方法强制把this绑定到obj上

3,隐式绑定

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

//当函数引用有上下文对象时,隐式绑定规则会把函数调用中的this绑定到这个上下文对象
//考虑调用位置是否有上下文对象  或是否被某个对象拥有或者包含
obj.foo()   //foo函数被调用时  obj对象拥有他

// 对象属性引用链中只有最顶层(最后一层)会影响调用位置
function foo() { 
    console.log( this.a ); 
}
var obj2 = { a: 42, foo: foo };
var obj1 = { a: 2, obj2: obj2 };
obj1.obj2.foo(); // 42   最靠近foo()的是obj2对象

4,默认绑定

function foo(){
    console.log(this.a)  //此时this.a解析为全局变量a  函数调用时应用了this的默认绑定
}
var a=2;
foo();  // 非严格模式下输出2

4,绑定规则总结

1,函数是否在new中调用,this绑定的是新创建的对象 var bar=new foo()
2,函数是否通过call显示绑定,this绑定的是指定的对象,var bar=foo.call(obj2)
3,函数是否在某个上下文对象中调用,this绑定的是那个上下文对象,var bar=obj.foo()
3,默认绑定,绑定到全局对象

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值