我有一个marketData
班:
export class marketData {
id: number;
denomCount: number;
itemCount: number;
conversionRates: Array<number> = [];
conversionRateToLowest: Array<number> = [];
itemPrices: Array<Array<number>> = [];
}
我想为其定义一个成员函数validate()
,该成员函数检查类的值是否设置正确。我编写了此方法的一部分来检查itemPrices
:
this.itemPrices.forEach(function(this, prices){
if(prices.length != this.itemCount){
// handle error
});
但是,以上内容给了我ERROR TypeError: "this is undefined"
。尝试以这种方式检查itemPrices
时,我得到了完全相同的错误:
this.itemPrices.forEach(function(prices){
if(prices.length != this.itemCount){
// handle error
});
即this
参数中没有function
。
访问itemCount
成员变量的正确方法是什么?
答案 0 :(得分:2)
这是因为您使用forEach的方式。像下面这样使用Arrow Functions代替。并且建议在使用打字稿类时始终使用箭头功能,否则您将不断遇到此问题。
this.itemPrices.forEach((prices) =>{
if(prices.length != this.itemCount){
// handle error
}
});
答案 1 :(得分:1)
您可以使用ES6的arrow functions访问this
。无论如何,请务必仔细阅读this以了解this
的上下文,以了解JavaScript并在JS的OOP中使用它们。
this.itemPrices.forEach((prices: number) => {
if (prices.length != this.itemCount){
// handle error
});
});
答案 2 :(得分:0)
该函数中this
的值与该类内部的值不同。您可以使用胖箭头功能,也可以使用bind(this)
将该功能绑定到类。
this.itemPrices.forEach(function(prices){
if(prices.length != this.itemCount){
// handle error
}).bind(this);