Рассмотрим следующее:
class Base {
_value;
constructor() {
this._value = 1;
}
get value() { return this._value; }
set value(v) { this._value = v; }
}
class Derived extends Base {
set value(v) {
// ...
super.value = v;
}
}
const d = new Derived();
d.value = 2;
console.log(d.value); // <-- undefined
Я ожидал, что метод "getter" класса Base
будет "унаследованным" в классе Derived
, и, следовательно, для отображения значения 2
вместо undefined
. Похоже, что оба метода «getter» или «setter» не наследуются независимо, а скорее рассматриваются как единое целое вместе. В том смысле, что если переопределенный метод сеттера отсутствовал или был связан с соответствующим геттером (специально объявленным в производном классе, а не наследуемым) следующим образом:
get value() { return super.value; }
, тогда не будет такой проблемы.
Итак, почему геттеры или сеттеры не наследуются независимо, так как они должны разделить понятия чтения и установки поля