Как создать 2 одинаковых независимых объекта в JavaScript? Столкнулся со следующей проблемой - создаю 2 объекта. Меняю свойства в одном объекте - меняются они же в другом. Как их сделать самостоятельными, даже если основываются на одном и том же наборе исходных данных?function Item(coordinates){ this.coordinates = coordinates || false; this.moveItemToAValueBelow = function(value){ for (var i in this.coordinates){ this.coordinates[i][1]+=value; } } } var first = new Item(data); var second = new Item(data); second.moveItemToAValueBelow(20); console.log(first.coordinates); console.log(second.coordinates); console.log показывает одно и тоже. Как правильно создавать 2 разных объекта с одинаковыми данными? Полный код странички представлен здесь https://github.com/valenso/pattern
Проблема здесь заключается в том, что при создании второго объекта second, вы передаете тот же самый объект data, который используется для создания объекта first. Это означает, что оба объекта в итоге ссылаются на один и тот же общий объект data.
Чтобы создать два независимых объекта, использующих одинаковые данные, вам нужно создать копию этих данных для каждого объекта. Вот как это можно сделать:
function Item(coordinates){ this.coordinates = JSON.parse(JSON.stringify(coordinates)) || false; this.moveItemToAValueBelow = function(value){ for (var i in this.coordinates){ this.coordinates[i][1]+=value; } } } var data = [[1, 2], [3, 4]]; // Ваши исходные данные var first = new Item(data); var second = new Item(data); second.moveItemToAValueBelow(20); console.log(first.coordinates); console.log(second.coordinates);
В данном случае JSON.stringify используется для создания копии исходных данных, которые затем разбираются снова с помощью JSON.parse. Таким образом, когда вы изменяете свойства объекта second, они не влияют на объект first.
Проблема здесь заключается в том, что при создании второго объекта second, вы передаете тот же самый объект data, который используется для создания объекта first. Это означает, что оба объекта в итоге ссылаются на один и тот же общий объект data.
Чтобы создать два независимых объекта, использующих одинаковые данные, вам нужно создать копию этих данных для каждого объекта. Вот как это можно сделать:
function Item(coordinates){this.coordinates = JSON.parse(JSON.stringify(coordinates)) || false;
this.moveItemToAValueBelow = function(value){
for (var i in this.coordinates){
this.coordinates[i][1]+=value;
}
}
}
var data = [[1, 2], [3, 4]]; // Ваши исходные данные
var first = new Item(data);
var second = new Item(data);
second.moveItemToAValueBelow(20);
console.log(first.coordinates);
console.log(second.coordinates);
В данном случае JSON.stringify используется для создания копии исходных данных, которые затем разбираются снова с помощью JSON.parse. Таким образом, когда вы изменяете свойства объекта second, они не влияют на объект first.