JS `this` 绑定解析

95 阅读1分钟

绑定优先级从上到下降低

  • 构造函数|箭头函数

  • 显式绑定( call apply bind )

    • 传入的绑定对象是非对象的话走 默认绑定 逻辑
  • 隐式绑定(obj.fn())

  • 默认绑定(globalThis,严格模式下是undefined

严格模式

严格模式下 默认绑定this将是undefined

使用场景

  • 全局环境: this === globalThis
  • Node 文件模块: this === module.exports
  • 构造函数: this 为当前new创建的实例
  • 函数:this默认绑定 结果
  • 对象方法:this隐式绑定 结果
  • 箭头函数:this为当前词法上下文
    • class 中方法的箭头函数相当于在构造函数中的this.a = () => {} 怎样的声明,this指向当前实例,而非原型链
    • 如果词法环境的 this是动态的,箭头函数的this也会随着变化:如函数中声明箭头函数,此时箭头函数的this用于指向函数中的this,但函数中的this可以随调用方式而变化。