JavaScript 判断 this 指向

105 阅读1分钟
  1. 函数是否在 new 中调用(new 绑定)?如果是的话 this 绑定的是新创建的对象
var bar = new foo()
  1. 函数是否通过 call, apply (显示绑定)或者 bind (硬绑定)调用?如果是的话,this 绑定的是指定的对象
var bar = foo.call(obj2)
  1. 函数是否在某个上下文对象中调用(隐式绑定)?如果是的话,this 绑定的是那个上下文对象
var bar = obj1.foo()
  1. 如果都不是的话,使用默认绑定。如果在严格模式下,就绑定到 undefined ,否则绑定到全局对象
var bar = foo()

箭头函数不适用以上规则,而是根据当前的词法作用域来决定 this