Не пойму, почему не работает метод установки

let p = {
    x: 2,
    y: 3,
    get r() {
        return Math.hypot(this.x, this.y);
    },
    set r(newValue) {
        oldValue = Math.hypot(this.x, this.y);
        let ratio = newValue / oldValue;
        this.x *= ratio;
        this.y *= ratio;
    },
};

p.r = 10;
console.log(p.r);

Почему то когда я задаю значение параметру метода установки, то последующие его операции не выполняются, а просто выводится значение которое я задал. Или я может просто не так задаю значение параметру или не так вызываю метод установки. Помогите пожалуйста, буду очень благодарен


Ответы (1 шт):

Автор решения: Grundy

Все работает верно. В этом можно убедиться выведя объект полностью.

Так как r - это вычисляемое свойство, при его установке изменяются внутренние поля. Значения их вычисляются так, чтобы при получении r результат было тем, что передается в сеттер.

let p = {
    x: 2,
    y: 3,
    get r() {
        return Math.hypot(this.x, this.y);
    },
    set r(newValue) {
        oldValue = Math.hypot(this.x, this.y);
        let ratio = newValue / oldValue;
        this.x *= ratio;
        this.y *= ratio;
    },
};


console.log(p);
p.r = 10;
console.log(p);

→ Ссылка