В чистом виде js не даёт такой возможности. То как вы будет создавать копии ваших объектов — зависит от вас.
1 2 3 4 5 |
var A = { param : 100} var B = A; B.param = 150; alert(A.param); #Выведет 150 |
т.к. А и B ссылаются на один и тот же объект.
Классика
Если идти классическим путем, то мы должны запрограммировать функцию клонирования объекта.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
//прототип объекта A function ObjectA() { this.param = 100; //функция клонирования this.clone = function() { cln = new ObjectA(); cln.param = this.param; return cln; } } //создали объект A = new ObjectA(); //клонировали B = A.clone(); B.param = 150; alert(A.param); #выведет 100 |
т.к. сейчас A и B — это разные объекты. Мы клонировали (скопировали данные) из источника, чтобы получить их копию.
Агент Джонсон
Но друзья, на помощь уже спешит агент Джонсон :)
1 2 3 4 5 |
var A = { param: 100 }; var B = JSON.parse(JSON.stringify(A)); B.param = 150; alert(A.param); #выведет 100 |
Сериализация-десериализация с помощью JSON позволяет не заморачиваться с созданием функции клонирования. Насколько быстрее/медленнее это работает? Нужно тестировать, если код требует высокого быстродействия.