Причина такого поведения заключается в том, что экземпляры Boss
ссылаются на один и тот же объект Boss
для установки и чтения своих значений.Экземпляры Boss
устанавливают значения _name
и _age
на Boss
.При чтении из этих атрибутов экземпляра возвращается последний набор значений.
Это можно увидеть по значению Boss._name
, которое меняется каждый раз, когда экземпляр Boss
устанавливает свое имя.После boss.name = 'Bob'
значение Boss._name
будет 'Bob'
.После установки boss2.name = 'Tom'
значение Boss._name
будет 'Tom'
.
Я добавил фрагмент, который, как мы надеемся, лучше отображает тревожное поведение.В приведенном ниже сценарии boss1
и boss2
имеют свое собственное хранилище, а boss3
и boss4
совместно используют свое хранилище (в качестве хранилища используется объект Boss
).
class Boss {
constructor(storage) {
this.storage = storage || {};
}
get name() {
return this.storage.name;
}
set name(value) {
this.storage.name = value;
}
}
var boss1 = new Boss(),
boss2 = new Boss(),
sharedStorage = {},
boss3 = new Boss(sharedStorage),
boss4 = new Boss(sharedStorage);
boss1.name = "a";
boss2.name = "b";
boss3.name = "c";
boss4.name = "d";
console.log(boss1.name, boss2.name, boss3.name, boss4.name);