Я создал класс Player с некоторыми методами. Я могу успешно создать проигрыватель, но когда я вызываю другой метод для только что созданного проигрывателя, я получаю undefined
.
Хотя класс Player в конечном итоге будет использоваться в другом классе class Scoreboard extends Player
, я не понимаю, почему я не могу вызывать функции для объекта Player.
Вот мой класс Player:
class Player {
constructor(player_id, score) {
this.player_id = player_id;
this.scores = [score];
this.total = score;
}
addScore(score) {
this.total += score;
this.scores.push(score);
}
averageScore() {
return this.scores.length ? this.total / this.scores.length : 0;
}
resetScore() {
this.scores = [];
this.score = 0;
}
};
Я создаю новый Player со следующим: const john = new Player(2, 50);
и вызываю john
, который в моей консоли возвращает:
Player {player_id: 2, scores: Array(1), total: 50}
player_id: 2
scores: (2) [50, 70]
total: 120
__proto__: Object
Сразу после этого звоню john.addScore(70)
и получаю undefined
. Я бы подумал, что использование this
предотвратит любые неопределенные ошибки. Что не так с моим классом?
Возврат this
из функции сделает то, что вы хотите
Это нормально, когда функция возвращает неопределенное значение. В вашем случае функция изменяет свой объект и не должна ничего возвращать.
addScore() возвращает неопределенное значение, это то, что вы видите в консоли. Это не ошибка.
Как оно вообще возвращается?
Функции без оператора return неявно возвращают значение undefined.
Всем спасибо! Думаю, мне нужно было еще немного проснуться, прежде чем работать над этим
Если функция ничего не возвращает, она напечатает
undefined
в консоли. Вместо этого попробуйте зарегистрировать экземпляр объектаPlayer
.