Попробуйте следующее:
var clone = (function(){
return function (obj) { Clone.prototype=obj; return new Clone() };
function Clone(){}
}());
Вот что происходит.
- Клон - это конструктор-пустышка.
- Мы назначаем объект, который мы хотим клонировать к прототипу конструктора Clone.
- Мы вызываем Clone с использованием «new», поэтому построенный объект имеет исходный объект как прототип своего конструктора aka (нестандартный)
__proto__
.
Клонированный объект будет обладать всеми свойствами исходного объекта без каких-либо копий чего-либо. Если свойствам клонированного объекта присваиваются новые значения, они не будут мешать исходному объекту. И никаких подделок встроенных модулей не требуется.
Имейте в виду, что свойство объекта вновь созданного объекта будет ссылаться на тот же объект, что и одноименное свойство клонированного объекта. Назначение нового значения для свойства клона не будет мешать оригиналу, но присвоение значений свойствам объекта clone будет.
Попробуйте хромированной или Firebug консоли:
var user = {
name: "Foo",
email: "[email protected]"
}
var clonedUser = clone(user);
console.dir(clonedUser);
Подробное объяснение этого метода клонирования можно найти here.
Объект JavaScript! = Объект JSON. Приведенный вами пример является литералом объекта JavaScript; Я обновил ваше сообщение соответственно. –
хороший вопрос! Я всегда буду думать, что user2 = пользователь сделает копию, но не буду. – Topera
Самый короткий «ответ»: да и да. ;) –