2017-05-01 39 views
5

Tôi đang viết một số mã phân loại và lặp lại một mảng. Bên trong vòng lặp, tôi đang cố gắng để truy cập vào đối tượng 'này' để làm một số chế biến như:'this' không được xác định bên trong vòng lặp foreach

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

nhưng điều này không, vì nó than phiền rằng 'đây' là undefined in đối tượng 'này' một cách chính xác như [đối tượng đối tượng ] trước/ngoài vòng lặp, nhưng bên trong vòng lặp, nó không xác định. Tại sao vậy? Và sửa chữa cái gì?

Trả lời

16

Bạn cần phải hoặc sử dụng một arrow function:

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

Hoặc sử dụng bind method:

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

Lý do là khi đi qua một chức năng thường xuyên như một callback, khi nó được gọi là this không thực sự được bảo tồn.
Hai cách mà tôi đã đề cập ở trên sẽ đảm bảo rằng phạm vi bên phải this được duy trì để thực thi chức năng trong tương lai.

Các vấn đề liên quan