这.引用对象而不是窗口对象



我有一个如下所示的对象。

在第 6 行,我写console.log(this.title, elem).

现在根据我对此的了解-关键字,this.title不应该引用当前对象,而应该引用全局窗口对象。现在与我的知识相反,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)在callBack-Function中,因此将引用全局窗口对象。这篇文章证实了我的观点,即this.title实际上应该引用全局对象。

有人可以解释一下吗?

箭头函数以词法绑定其上下文,因此这实际上是指原始上下文。由于您在此处使用Arrow函数,因此 forEach(( 方法中的 this 值指向声明它的词法环境。这是在showTags()方法内部,因此它具有与showTags()相同的this值。

如果此处未使用箭头函数,则this的值将为窗口,如下面的代码片段所示:

const video = {
    title: "a",
    tags: ["a", "b", "c", "d"],
    showTags() {
        this.tags.forEach(function(elem ) {
            console.log(this.title, elem)
        });
    }
}
video.showTags();

相关内容

  • 没有找到相关文章

最新更新