Мне любопытно, как я получаю ошибку «неопределенное не является функцией». Рассмотрим следующий класс:Могут ли статические методы в javascript вызвать не статические
var FlareError = require('../flare_error.js');
class Currency {
constructor() {
this._currencyStore = [];
}
static store(currency) {
for (var key in currency) {
if (currency.hasOwnProperty(key) && currency[key] !== "") {
if (Object.keys(JSON.parse(currency[key])).length > 0) {
var currencyObject = JSON.parse(currency[key]);
this.currencyValidator(currencyObject);
currencyObject["current_amount"] = 0;
this._currencyStore.push(currencyObject);
}
}
}
}
currencyValidator(currencyJson) {
if (!currencyJson.hasOwnProperty('name')) {
FlareError.error('Currency must have a name attribute in the json.');
}
if (!currencyJson.hasOwnProperty('description')) {
FlareError.error('Currency must have a description attribute in the json.');
}
if (!currencyJson.hasOwnProperty('icon')) {
FlareError.error('Currency must have a icon attribute in the json.');
}
}
static getCurrencyStore() {
return this._currencyStore;
}
};
module.exports = Currency;
Рефакторинг в сторону, этот вопрос находится на линии: this.currencyValidator(currencyObject);
я получаю ошибку «неопределенные не является функцией»
Я предполагаю, что это потому, что у меня есть статический метод Кто в Internals вызвать нестационарный метод? Будет ли этот статический метод статическим? и если так действует концепция this.methodName
?
Интересно, почему вы решили сделать 'store' static, потому что кажется, что вы не знаете, что означает' static'. – zeroflagL
Конечно, статический метод может вызывать нестатический один *, если у него есть экземпляр для его вызова *. Где ваш экземпляр? – Bergi