This code works...It creates a Test object and when that Test object is initialized, InnerObject is created and pushed into objects array.
list() method returns copy of objects array.
I log return value of list() method on line 42 and below it, on line 46, I update the object in objects array (mutating it).
What I don't understand is why this mutation is reflected on line 42 when this line should be executed before line 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);