'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...
});