Function.prototype.call不会在Arrow Function处设置它

时间:2016-07-24 23:33:57

标签: javascript arrow-functions

注意,相关Value of this inside object method?

鉴于

var obj = {
  property: 5,
  func1: function () {
    console.log(this.property);
  },
  func2: () => {
    console.log(this.property);
  }
}
{p> this Window位于obj.func2()

尝试使用thisobj设置为Function.prototype.call()时,this仍为Window

var obj = {
  property: 5,
  func1: function () {
    console.log(this.property);
  },
  func2: () => {
    console.log(this.property);
  }
}

obj.func2.call(obj);

  1. 这是预期的行为吗?

  2. 为什么Function.prototype.call()未设置context obj.func2obj

1 个答案:

答案 0 :(得分:4)

预计按the standard

  

ArrowFunction没有为参数,super,this或new.target定义本地绑定。对argumentssuperthisnew.targetArrowFunction的任何引用都必须解析为词汇封闭环境中的绑定。

这意味着 - 您无法设置未定义的内容。

另外,相关:

使用[[Call]]内部插槽调用函数,将this绑定设置为

  
      
  1. 执行OrdinaryCallBindThis(F, calleeContext, thisArgument)
  2.   

反过来checks

  
      
  1. thisModeF [[ThisMode]]内部广告位的值。
  2.   
  3. 如果thisMode是词法,请返回NormalCompletion(undefined)
  4.   

因此,在内部它还会检查函数是否是词法范围(箭头函数)。

参考文献: