У меня есть класс 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
?
3 ответа
Это из-за того, как вы используете forEach. Используйте функции стрелок, как показано ниже. И рекомендуется, чтобы при использовании классов машинописи всегда использовались функции стрелок, иначе вы продолжите сталкиваться с этой проблемой.
this.itemPrices.forEach((prices) =>{
if(prices.length != this.itemCount){
// handle error
}
});
Значение this
в функции отличается от значения внутри класса. Вы можете использовать функцию жирной стрелки или bind(this)
, чтобы связать функцию с классом.
this.itemPrices.forEach(function(prices){
if(prices.length != this.itemCount){
// handle error
}).bind(this);
Вы можете использовать функции стрелок в ES6. чтобы получить доступ к this
. В любом случае, прочитайте этот до udnerstand в контексте this
, когда дело доходит до JavaScript и использования их в ООП в JS.
this.itemPrices.forEach((prices: number) => {
if (prices.length != this.itemCount){
// handle error
});
});
Похожие вопросы
Новые вопросы
javascript
По вопросам программирования на ECMAScript (JavaScript / JS) и его различных диалектах / реализациях (кроме ActionScript). Включите все соответствующие теги в свой вопрос; например, [node.js], [jquery], [json] и т. д.