2017-05-01 33 views
5

Bazı yazı kodu yazıyor ve bir dizi yineliyorum. döngü içinde, ben gibi bazı işlemleri yapmaya 'bu' nesneye erişim çalışıyorum:'this' foreach döngüsünde tanımlanmamış

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

ama 'bu' [nesne nesne olarak 'bu' nesne baskılar düzgün tanımlanmamış şikayet olarak bu, başarısız ] döngüden önce/dışında, ancak döngü içinde, tanımlanmamıştır. Neden? Ve bunun için çözüm nedir?

cevap

16

Bir arrow function kullanmak için her gerekir: Bir geri arama gibi düzenli fonksiyonu geçerken

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

nedeni this çağrılır zaman o:

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

Veya kullanmak bind method aslında korunmaz.
Yukarıda bahsettiğim iki yol, işlevin gelecekteki yürütülmesi için doğru this kapsamının korunmasını sağlayacaktır.