Вы можете создать функцию клонирования, делать что-то вроде этого:
var clone = function(obj) {
// Create a new object using the same prototype as the original object
var cloned = Object.create(obj);
// Copy each property from 'obj' to 'cloned'
for (p in obj) {
if (obj.hasOwnProperty(p)) {
cloned[p] = obj[p];
}
}
return cloned; // Return the cloned object
}
EDIT: Будьте осторожны с первым оператором, чтобы создать клонированный объект из оригинал.
Вы должны заметить, что если вы пишете var cloned = {};
, как я делал раньше, прототипы будут отличаться, так что это решение не будет работать должным образом на 100%, потому что если вы используете оператор instanceof
, он будет возвращать false
.
Если вы используете только var cloned = Object.create(obj);
, как описывают другие ответы, вы просто получите клонированный объект с аналогичным прототипом, чем прототип оригинала. Но вам также нужно скопировать свойства из исходного объекта и прикрепить их к клонированной версии. Вот почему мы должны использовать for-loop.
Наконец, если второй предыдущий подход, использующий Object.create не работает в вашем браузере, потому что у него есть наследие JavaScript двигателя, то вы должны использовать небольшой обходной путь в следующем.
function F() {};
F.prototype = obj.prototype;
var cloned = new F();
Надеюсь, это поможет! :)
'' '' '' '' как прототип, так что, если вы не перезаписываете одно и то же свойство на 'b', они будут проверяться на' a' при доступе. – Yoshi
точный дубликат [Копирование объекта в Javascript] (http://stackoverflow.com/questions/728360/copying-an-object-in-javascript) – Bergi
Извините, потому что я написал свой ответ, но у меня была небольшая ошибка , Проверьте это, потому что теперь я исправил его, а также написал лучшее описание. Обратите внимание, что это всего лишь код JavaScript, который лучше всего изучает продвинутые аспекты языка, но вы можете использовать метод расширения jQuery слишком хорошо? :) – albertoblaz