Предполагая, что вы создали Tariff
экземпляры, подобные этим:
const provAufwand= {
SO: 1,
HO5: 2,
HO10: 3,
HO20: 4
};
const tariff = new Tariff(provAufwand);
const tariffCopy = new Tariff(provAufwand);
Тогда причина, по которой BaseTariff
или tariffCopy
также меняется, когда вы изменили tariff
, заключается в том, что они ссылаются натот же provAufwand
объект.
Когда вы передали provAufwand
в конструктор Tariff
, передаваемый параметр был не фактическим value
объекта, а reference
для объекта.
Когда вы передаете object
или array
в функцию, тогда аргумент передается по ссылке .
Это означает, чтоизменение значения объекта / массива внутри функции влияет на значение того же объекта / массива за пределами функции.
Для ее решения можно использовать spread syntax
при передаче provAufwand
при создании нового Tariff
объекта.
const provAufwand= {
SO: 1,
HO5: 2,
HO10: 3,
HO20: 4
};
const tarrif = new Tariff({...provAufwand});
const tarrifCopy = new Tariff({...provAufwand});
Это гарантирует, что вы передаете совершенно разные объекты при создании экземпляров вашего класса.