Я пытаюсь использовать здесь наследование в JavaScript и обнаружил проблему со значением массива в классе Parent, которое наследуется класс Дочерний. Код ниже представляет собой обычное наследование:
var Parent = function() {
this.list = [];
};
var Child = function() {};
Child.prototype = new Parent;
Child.prototype.constructor = Child;
var obj1 = new Child;
obj1.list.push("hello");
console.log(obj1.list); // prints ["hello"];
Когда я инициализировал новый объект Child (наследует Parent, который содержит переменную массива с именем list) в obj1 и попытался нажать obj1.list со значением "привет", obj1.list печатает ["привет"] .. пока все хорошо.
Проблема возникает, когда я сделал приведенный выше пример и попытался инициализировать новый объект Child в obj2, а затем нажать obj2 в список со значением "до свидания", а obj2.list теперь печатает ["привет", "до свидания"]. (См. код ниже:)
var obj2 = new Child;
obj2.list.push("goodbye");
console.log(obj2.list); // prints ["hello", "goodbye"];
Возможно, у меня неправильное представление, но массив list в Parent каким-то образом сохраняет значение, и я не знаю почему.
Это большая проблема, потому что если я повторно использую класс Parent для многих других дочерних классов, как в случае выше, если Parent имеет переменную массива, общую для его дочерних классов, значение будет передан и другим дочерним классам, что для меня неожиданно.
Я ожидал, что класс Child представляет новый объект, то же самое относится к классу Parent, когда класс Child инициализируется как obj1. ], который затем, когда я инициализирую новый объект Child в obj2, переданное значение из obj1 не должно использоваться совместно с obj2.
-- Вопрос --
Может ли кто-нибудь помочь мне выяснить, почему list (переменная массива Parent) в приведенном выше примере сохраняет значения/разделяет значения которые инициируются дочерними объектами (в приведенном выше случае obj1 и obj2)?
Если у вас есть другое решение, которое может решить эту проблему, это будет очень мило с вашей стороны. , но я буду рад сначала выяснить проблему выше.