Всем доброго дня.
Наткнулся на одну проблему: через
set не могу установить новые значения для свойств класса.
Вот чуть поподробнее:
class Example {
constructor() {
this.value_1 = 10;
this.value_2 = 20;
console.log("Through constructor");
console.log(`value-1: ${this.value_1}\nvalue-2: ${this.value_2}`);
}
set set_value(newVal) {
console.log("\nThrough set");
console.log(`value-1: ${this.value_1}\nvalue-2: ${this.value_2}`);
this.value_1 = newVal;
}
printValue() {
console.log(`\nThrough method`);
console.log(`value-1: ${this.value_1}\nvalue-2: ${this.value_2}`);
}
};
const newExample = new Example();
Example.prototype.set_value = 30;
newExample.printValue();
То есть нам нужно установить новое значение для свойства
value_1 через
set,
но при выводе в консоль он не видит свойства класса и при попытке установки
value_1 через
set не получается.
Но мне захотелось вывести сам обьект через
this в самом конструктуре, и вывести через
set и змаетил что они разные.
class Example {
constructor() {
this.value_1 = 10;
this.value_2 = 20;
console.log(this);
}
set set_value(newVal) {
console.log(this);
}
printValue() {
console.log(this.value_1, this.value_2);
}
};
const newExample = new Example();
Example.prototype.set_value = 30;
И как мы видим: если выводим обьект через его инициализацию, то все свойства находятся на первом уровне вложенности, но его метод
printValue находится в __proto__, и ещё здесь находится новое свойство
value_1: 30 которое мы попытались установить через
set.
Но если мы выведем
this в
set то увидим другую картину:
this здесь совсем отличается - он не видит свойства класса, и устанавливает новое свойство
value_1 в своем обьекте.
И чтобы получить это новое свойство надо обращаться по такому длинному пути:
this.constructor.prototype.value_1
Так в чём суть вопроса: почему вывод `this` через конструктор и через `set` совсем разный? И почему чтобы получить новое значение свойства которое мы установили через
set надо обращаться по такому длинному пути:
this.constructor.prototype.value_1
?