Проблемы с настройкой и получателем

#javascript #getter-setter

#javascript #getter-установщик

Вопрос:

Почему параметр if не выполняется в установщике для age()? Он должен возвращать «Возраст должен быть числом»;

Параметр get работает, но не параметр set.

 class Player {
    constructor(name, age, position) {
        this._name = name;
        this._age = age;
        this._position = position;
    }
set age(value){ 
    if(value.isNaN()) {
        return "Age must be a number";
    } else {
        return this._age;
    }
}
get name() {
        return this._name;
    }
get age() {
    if(typeof this._age === "number") {
        return this._age;
    }else{
        return "Cant fetch players age"
    }
}
get position() {
    return this._position;
}
};
const test = new Player("Peter", "38", "Forward")
console.log(test.age)
  

Комментарии:

1. Вы нигде не вызываете установщик, вы тщательно обходите его в конструкторе. Также обратите внимание, что установщики не возвращают вещи.

2. Кроме того, isNaN пытается преобразовать аргумент в число перед проверкой, «38» преобразуется в число и isNaN возвращает false .

3. хм, хорошо, я увидел свою ошибку с «return this._age» и я изменил isNaN() на typeof statment.. но это все еще не работает … я не понимаю, что вы подразумеваете под обходом.

4. Вы не устанавливаете значение this.age или наоборот в своем установщике.

Ответ №1:

ваш конструктор должен вызывать установщик вместо переменной экземпляра:

 class Player {
    constructor(name, age, position) {
        this._name = name;
        this.age = age;  //call setter
        this._position = position;
    }
    ...