'this' undefined внутри цикла foreach

Я пишу код typescript и итерацию массива. Внутри цикла я пытаюсь получить доступ к объекту 'this', чтобы выполнить некоторую обработку как:

console.log('before iterate, this = ' +this);
myarray.days.forEach(function(obj, index) {
    console.log('before transform, this : ' + this);
    this.datePipe.transform...
});

но это не удается, поскольку он жалуется, что 'this' равен undefined Объект 'this' корректно печатает как [объект объекта] перед/вне цикла, но внутри цикла это undefined. Почему это? И для чего это исправление?

Ответ 1

Вам нужно либо использовать функцию :

myarray.days.forEach((obj, index) => {
    console.log('before transform, this : ' + this);
    this.datePipe.transform...
});

Или используйте метод привязки:

myarray.days.forEach(function(obj, index) {
    console.log('before transform, this : ' + this);
    this.datePipe.transform...
}.bind(this));

Причина в том, что при передаче регулярной функции в качестве обратного вызова, когда она вызывается, this на самом деле не сохраняется.
Два способа, которые я упомянул выше, будут гарантировать, что область права this сохраняется для будущего выполнения функции.

Ответ 2

Добавьте this в качестве параметра для обратного вызова.

Добавление }, this); вместо }.bind(this)); должно решить проблему в Angular.

Таким образом, должно выглядеть так:

myarray.days.forEach(function(obj, index) {
    console.log('before transform, this : ' + this);
    this.datePipe.transform...
}, this);

Ответ 3

Попробуй это:

myarray.days.forEach( (obj) => {
    console.log('before transform, this : ' + this);
    this.datePipe.transform...
});