如何正确判断this的指向问题

如果去用一句话去说明this指向问题,那么既是:谁调用它那么this就指向谁。
但是仅通过这句话,我们很多时候并不能准确判断this指向。因此我们需要一些规则去帮助自己去判断:
浏览器环境:无论是否在严格模式下,在全局执行环境中,this都指向全局对象window;
是否是new绑定:
如果是new绑定,并且构造函数中没有返回function或者是object,那么this指向的这个新对象。
函数是否通过call,apply调用,或者是用了bind绑定,如果是那么this绑定的就是制定的对象。可以归结为显示绑定
function info(){
sonsole.log(this.age)
}
var person={
age:20,
info
}
var age=28;
var info=person.info;
info.call(person); //20
info.apply(person);//20
info.bind(person)();//20

同时我们还需要注意一中特殊情况,如果call,apply或者bind传入的第一个参数值是undefiend或者null,严格模式下this的值为传入的值null/undefiend。非严格模式下,实际应用的默认绑定规则,this指向全局对象。

隐式绑定,函数的调用时在某个对象上处罚的,即调用位置上存在上下文对象。典型的隐式调用为:xxx.fn()
默认绑定,在不能应用其他绑定规则时使用的默认规则,通常是独立函数调用。
箭头函数的情况:
箭头函数没有自己的this,继承外层上下文绑定的this

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值