我之所以问是因为我已经阅读了与此问题类似(但不相等)的问题。

据我了解,我明白为什么这段代码不起作用:



let myObj = {
  name: 'inner text',
  myFunction: () => {
    console.log("before text " + this.name + " after text");
  }
}
myObj.myFunction();





原因:创建箭头函数(myObj)的上下文属于全局范围(取决于严格模式等,它是windowundefined)。

我明白了。但是在嵌套对象文字的情况下,难道不应该像下面的示例那样将外部对象文字作为arrow函数的继承上下文吗?



let outer = {
  name: 'outer',
  obj: {
    name: 'inner',
    myFunction: () => {
      console.log("before text " + this.name + " after text");
    }
  }
}
outer.obj.myFunction();





我希望this引用outer的上下文,这是obj嵌套的对象文字。
事实并非如此,也是我无法正确理解此继承的词汇范围的原因。

有人可以解释为什么会这样吗?

最佳答案

但是在嵌套对象文字的情况下,难道不应该像下面的示例那样将外部对象文字作为arrow函数的继承上下文吗?


没有。

箭头函数复制this的当前值;

var object = {
     a: this,
     b: {
         a: this,
         b: {
             a: this
         }
     }
}


嵌套多少层都无所谓,this的值不会改变。

由于对象文字的每个级别都出现在相同的函数中,因此它们都具有相同的this值。

09-25 16:29