2017-05-01 16 views
5

Piszę kod maszynopisu i iteruję tablicę. Wewnątrz pętli Próbuję uzyskać dostęp do „tego” przedmiotu zrobić niektóre przetwarzania jak:'this' jest niezdefiniowany wewnątrz pętli foreach

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

ale to się nie powiedzie, ponieważ twierdzi, że „to” jest niezdefiniowany drukuje „to” object poprawnie jako [object Object ] przed/poza pętlą, ale wewnątrz pętli jest niezdefiniowana. Dlaczego? I jaka jest tego poprawka?

Odpowiedz

16

Trzeba albo użyć arrow function:

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

lub użyj bind method:

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

Powodem jest to, że podczas przechodzenia regularną funkcję wywołania zwrotnego, gdy jest ona wywoływana this nie jest faktycznie zachowany.
Dwa wyżej wymienione sposoby sprawią, że odpowiedni zakres zostanie zachowany do przyszłego wykonania funkcji.

Powiązane problemy