我之所以问是因为我已经阅读了与此问题类似(但不相等)的问题。
据我了解,我明白为什么这段代码不起作用:
let myObj = {
name: 'inner text',
myFunction: () => {
console.log("before text " + this.name + " after text");
}
}
myObj.myFunction();
原因:创建箭头函数(
myObj
)的上下文属于全局范围(取决于严格模式等,它是window
或undefined
)。我明白了。但是在嵌套对象文字的情况下,难道不应该像下面的示例那样将外部对象文字作为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
值。