我在函数中有以下Typescript代码块,其中variableInQuestion = 0
在函数外定义:
console.log(this.variableInQuestion);
this.arrayOfObjects.each(function(thing) {
if (this.variableInQuestion !== undefined && thing.property == this.variableInQuestion) {
...
}
});
问题是console.log行打印出了我所期望的内容(默认值0),但是我在第三行得到了一个错误,说Cannot read properties of undefined (reading 'variableInQuestion') at [[[location of the first variableInQuestion in the third line]]]
。我不明白为什么它会给我一个"无法读取未定义的属性"当我在测试是否未定义时出现错误。
编辑:.each
的东西是特定于所讨论的对象数组;这不是问题所在。如果我运行以下命令…
console.log(this.variableInQuestion);
this.arrayOfObjects.each(function(thing) {
if (0 !== undefined && thing.property == 0) {
...
}
});
和我期望的完全一样。
解决这个问题的方法如下:
variableInQuestion = 0;
myFunction() {
let placeholder = this.variableInQuestion;
this.arrayOfObjects.each(function(thing) {
if (placeholder !== undefined && thing.property == placeholder) {
...
}
});
}
特别感谢Pointy发现了这个问题!
如果您console.log
您的数据,您将看到
class X {
variableInQuestion = 123;
arrayOfObjects = [1, 2, 3];
example() {
console.log(this.variableInQuestion);
this.arrayOfObjects.forEach(function (thing) {
console.log({
this: this,
thing: thing,
})
})
}
}
new X().example()
// 123
// { "this": undefined, thing: 1 }
// { "this": undefined, thing: 2 }
// { "this": undefined, thing: 3 }
因为forEach
不保留this
的值。
使用lambda
this.arrayOfObjects.forEach((thing) => { console.log(this) })
,保持this
值
let that = this;
this.arrayOfObjects.forEach((thing) => { console.log(that) })
,或者提供thisArg
到forEach
(不知道.each
但Array.prototype.forEach supports that
)
this.arrayOfObjects.forEach(function(thing){ console.log(this) }, this)