Свойство наследования дочернего класса ES6

У меня есть родитель A и два других класса B и C, которые расширяют A. Я пытаюсь изменить свойство конфигурации внутри родительского класса A из дочернего, например B, и автоматически делиться с другими дочерними элементами, например C?

class A {
   constructor() {
       this.config = {};
   }
}

class B extends A {
    constructor() {
        super();
    }
   updateConfig() {
       this.config = "B";
   }
}

class C extends A {
    constructor() {
        super();
    }
    getConfig() {
        console.log(this.config);
    }
}

const b = new B();
const c = new C();
b.updateConfig();
c.getConfig(); // got {} expected "B"

person Salmen Bejaoui    schedule 22.09.2018    source источник
comment
b и c могут иметь тип A (путем наследования), они по-прежнему являются разными объектами (т. е. они не имеют ничего общего с точки зрения фактических данных).   -  person Jeto    schedule 22.09.2018
comment
То, что классы наследуют друг друга, ничего не говорит об отношениях между конкретными экземплярами.   -  person Bergi    schedule 22.09.2018


Ответы (1)


b и c совершенно разные объекты. Хотя они оба происходят от A (что означает, что они наследуют поведение, а не данные), они являются отдельными экземплярами и, следовательно, имеют отдельные данные экземпляров. Таким образом, у каждого из них есть свой собственный раздел своего объекта, который является A. Когда вы изменяете часть A в b, это не влияет на часть A в c.

Если вам нужно одно значение, совместно используемое всеми экземплярами, возможно, вы хотите использовать статическое свойство одного из ваших классов или, возможно, вы хотите, чтобы каждый из b и c имел ссылку на один и тот же объект в своих данных экземпляра, поэтому, когда один изменяет этот объект, другой увидит такое же изменение (поскольку они оба ссылаются на один и тот же объект).

person jfriend00    schedule 22.09.2018