Почему приведенный ниже код регистрирует мутировавший объект в строке 42, когда метод update вызывается ниже него, в строке 46.
var Test = (function() { var objects = []; var InnerObject = { init: function(data) { this.prop1 = data.prop1 || 'first'; this.prop2 = data.prop2 || 'second'; this.prop3 = data.prop3 || 'third'; return this; } }; return { init: function(data) { data.forEach(function (item) { var obj = Object.create(InnerObject).init(item); objects.push(obj); }); return this; }, update: function(idx) { var testObj = objects[idx]; for (var prop in testObj) { testObj[prop] = '1'; } return obj; }, list: function() { return objects.slice(); } } })(); var item = { prop1: 'newFirst', prop2: 'newSecond', prop3: 'newThird' } var data = [item]; var obj = Object.create(Test).init(data); console.log(obj.list()); // why the property value of each element here is 1 //when we are invoking update method below //without update method it would log values newFirst and so on... obj.update(0);
Что я уже пробовал:
Этот код работает...Он создает тестовый объект, и когда этот тестовый объект инициализируется, InnerObject создается и помещается в массив объектов.
метод list() возвращает копию массива объектов.
Я регистрирую возвращаемое значение метода list() в строке 42 и ниже него, в строке 46, обновляю объект в массиве объектов (мутируя его).
Чего я не понимаю, так это почему эта мутация отражается на строке 42, когда эта строка должна быть выполнена до строки 46.