我正在编写一些打字稿代码并迭代一个数组。在循环内部,我正试图访问这个'对象做一些处理:
console.log('before iterate, this = ' +this);
myarray.days.forEach(function(obj, index) {
console.log('before transform, this : ' + this);
this.datePipe.transform...
});
但这失败了,因为它抱怨说这个'未定义 '这'对象在循环之前/之外作为[对象对象]正确打印,但在循环内部,它是未定义的。这是为什么?那是什么解决方案?
答案 0 :(得分:46)
您需要使用arrow function:
myarray.days.forEach((obj, index) => {
console.log('before transform, this : ' + this);
this.datePipe.transform...
});
或使用bind method:
myarray.days.forEach(function(obj, index) {
console.log('before transform, this : ' + this);
this.datePipe.transform...
}.bind(this));
原因是当将常规函数作为回调传递时,在调用它时,实际上不会保留this
。
我上面提到的两种方法将确保保留正确的this
范围,以便将来执行该函数。
答案 1 :(得分:4)
添加this
作为回调参数。
添加}, this);
代替}.bind(this));
应解决Angular中的问题。
因此,应该看起来像:
myarray.days.forEach(function(obj, index) {
console.log('before transform, this : ' + this);
this.datePipe.transform...
}, this);
答案 2 :(得分:0)
尝试一下:
myarray.days.forEach( (obj) => {
console.log('before transform, this : ' + this);
this.datePipe.transform...
});