JS中 this 究竟绑定了谁 ❓

首先:this有一个误解,实际上this在许多时候是不指向自身的,用call可以确保this指向函数对象本身

this的绑定有四种

  1. 默认绑定:不带任何修饰的函数引用进行调用,为默认规则

  2. 隐式绑定:使用上下文对象来调用它

    出现常见的this绑定问题:被隐式绑定的函数会丢失绑定对象,从而应用默认绑定将this绑定到全局对象/undefined

  3. 显示绑定:用apply/call 强制绑定/硬绑定

    硬绑定ES5内置:Function.prototype.bind

  4. new绑定:用new初始化类调用类中构造函数时,四个步骤

    创建一个全新对象 => 对象被执行原型连接 => 绑定到函数调用的this => 若函数没有返回其他对象,则new中函数调用会自动返回该新对象

优先级:

调用new的则绑定的是新对象 =no=> 显式绑定/硬绑定则为指定的对象 =no=>隐式绑定则绑定的是上下文对象 =no=> 默认绑定严格模式下为绑定undefined,否则为全局对象

例外情况:

  1. 把null/undefined作为this的绑定对象传入call、apply、bind中调用会被忽略,实际应用默认绑定规则,但有可能产生副作用,一个🌰:

    Math.max.apply(null,arr);//求极值时可用
  2. ”更安全“的做法是传入一个特殊的对象,this绑定上不会产生任何副作用,如₡

    ₡=Object.create(null);
  3. 箭头函数:内部this绑定无法被修改(new也不行),不使用this的四种标准规则,而是根据外层作用域来决定this

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值