этот. ссылается на объект вместо Window-Object - PullRequest
2 голосов
/ 30 апреля 2019

У меня есть объект, как показано ниже.

В строке 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) находится внутри callBack-Function, будет сделана ссылка на Global Window-Object. Этот пост подтверждает мое представление о том, что this.title должен на самом деле ссылаться на Глобальный объект.

Может кто-нибудь объяснить?

1 Ответ

3 голосов
/ 30 апреля 2019

Функции стрелок лексически связывают свой контекст, так что это фактически относится к исходному контексту.Поскольку здесь используется функция Arrow, значение this внутри метода forEach () указывает на лексическую среду, в которой она объявлена.Он находится внутри метода showTags(), поэтому он имеет то же значение this, что и значение showTags().

Если функция стрелки здесь не используется, тогда значение this будет окном, какво фрагменте ниже:

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