这个。引用对象而不是 Window-Object
this. references Object instead of Window-Object
我有一个如下所示的对象。
在第 6 行我写 console.log(this.title, elem)
。
现在根据我了解到的this.-关键字,this.title
不应该在这里引用当前对象,而是全局 Window-Object。现在与我的知识相反,this.title
似乎正确地引用了视频对象的 属性。
const video = {
title: "a",
tags: ["a", "b", "c", "d"],
showTags() {
this.tags.forEach(elem => {
console.log(this.title + ": ", elem)
});
}
}
video.showTags();
这是浏览器显示的内容:
a: a
a: b
a: c
我认为,由于 console.log(this.title, elem)
在回调函数中,因此将引用全局 Window-Object。 This post 证实了我的观点,即 this.title
实际上应该引用全局对象。
有人可以解释一下吗?
箭头函数在词法上绑定它们的上下文,因此 this 实际上指的是原始上下文。由于您在这里使用 Arrow
函数,因此 forEach() 方法中 this
的值指向声明它的词法环境。它在 showTags()
方法内部,因此它具有与 showTags()
.
相同的 this
值
如果此处未使用箭头函数,则 this
的值将为 window,如以下代码片段所示:
const video = {
title: "a",
tags: ["a", "b", "c", "d"],
showTags() {
this.tags.forEach(function(elem ) {
console.log(this.title, elem)
});
}
}
video.showTags();
我有一个如下所示的对象。
在第 6 行我写 console.log(this.title, elem)
。
现在根据我了解到的this.-关键字,this.title
不应该在这里引用当前对象,而是全局 Window-Object。现在与我的知识相反,this.title
似乎正确地引用了视频对象的 属性。
const video = {
title: "a",
tags: ["a", "b", "c", "d"],
showTags() {
this.tags.forEach(elem => {
console.log(this.title + ": ", elem)
});
}
}
video.showTags();
这是浏览器显示的内容:
a: a
a: b
a: c
我认为,由于 console.log(this.title, elem)
在回调函数中,因此将引用全局 Window-Object。 This post 证实了我的观点,即 this.title
实际上应该引用全局对象。
有人可以解释一下吗?
箭头函数在词法上绑定它们的上下文,因此 this 实际上指的是原始上下文。由于您在这里使用 Arrow
函数,因此 forEach() 方法中 this
的值指向声明它的词法环境。它在 showTags()
方法内部,因此它具有与 showTags()
.
this
值
如果此处未使用箭头函数,则 this
的值将为 window,如以下代码片段所示:
const video = {
title: "a",
tags: ["a", "b", "c", "d"],
showTags() {
this.tags.forEach(function(elem ) {
console.log(this.title, elem)
});
}
}
video.showTags();