Наследование и общие данные

код в jsfiddle.net

class FirstClass {
  constructor() {
    this.flag = 'first class';
    this.label = document.querySelector('.class-val');
  }
  updateVal() {
    this.label.textContent = this.flag.toString();
  }
  toggle() {
    this.flag = !this.flag
    this.updateVal();
  }
}

class SecondClass extends FirstClass {
  constructor() {
    super();
    this.updateVal();
  }
}

class ThirdClass extends SecondClass {
  constructor() {
    super();
    this.label = document.querySelector('.class-val-2');
    console.log(this.flag);
    this.updateVal();
  }
  toggle() {
    this.flag = !this.flag;
    this.updateVal();
  }
  updateVal() {
    this.label.textContent = this.flag.toString();
  }
}

const secondClass = new SecondClass();
const thirdClass = new ThirdClass();
const updateBtn1 = document.querySelector('.js-update-val');
const updateBtn2 = document.querySelector('.js-update-val-2');
const toggleBtn1 = document.querySelector('.js-toggle-val');
const toggleBtn2 = document.querySelector('.js-toggle-val-2');

updateBtn1.addEventListener('click', () => {
  secondClass.updateVal();
})
updateBtn2.addEventListener('click', () => {
  thirdClass.updateVal();
})
toggleBtn1.addEventListener('click', () => {
  secondClass.toggle();
})
toggleBtn2.addEventListener('click', () => {
  thirdClass.toggle();
})
.container {
  display: flex;
}

.col {
  width: 50%;
  display: flex;
  flex-direction: column;
}
<div class="container">
  <div class="col">
    <div class="class-val" data-id="1">Val 1</div>
    <button class="js-update-val" data-id="1">Обновить</button>
    <button class="js-toggle-val" data-id="1">Toggle</button>
  </div>
  <div class="col">
    <div class="class-val-2" data-id="2">Val 2</div>
    <button class="js-update-val-2" data-id="2">Обновить</button>
    <button class="js-toggle-val-2" data-id="2">Toggle</button>
  </div>
</div>

Есть родительский класс (FirstClass) с переменной.
Его наследует SecondClass.
И есть ThirdClass, который наследует SecondClass.

При инициализации переменная flag во всех трех классах одинаковая до тех пор, пока в каком-то из классов она не изменяется. Объясните пожалуйста, почему переменная при инициализации одна для всех, а после изменения - у каждого класса своя?

И как сделать так, чтобы данные были одни для всех потомков?


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