2010-04-20 4 views
3

У меня есть класс в формате json. Я хотел бы сделать два примера. Прямо сейчас (довольно очевидно, почему), когда я создаю два объекта, у меня действительно есть 2 вара, указывающих на один. (b.blah = 'z' будет делать a.blah == 'z')Как сделать копию объекта? Javascript

Как сделать копию объекта?

var template = { 
    blah: 0, 
    init: function (storageObj) { 
     blah = storageObj; 
     return this; //problem here 
    }, 
    func2: function (tagElement) { 
    }, 
} 

a = template.init($('form [name=data]').eq(0)); 
b = template.init($('form [name=data2]').eq(0)); 
+0

Надеюсь, что это сообщение поможет. http://stackoverflow.com/questions/122102/what-is-the-most-efficient-way-to-clone-a-javascript-object – rahul

+3

Вы можете проверить: http://stackoverflow.com/questions/ 122102/что-это-The-самый эффективный способ, к клону-а-JavaScript-объекта. На это ответил сам Джон Ресиг. Больше нечего добавить! :) –

+0

Кстати, я думаю, что 'blah = storageObj;' должно быть 'this.blah = storageObj;' ... –

ответ

-2
var b = {}, key; 

for (key in a){ 

    if(a.hasOwnProperty(key)){ 
     b[key] = a[key]; 
    } 

} 
+0

Ой, похоже, я неправильно понял вопрос ... ответ seanmonstar - это путь! – Vincent

+0

вы ответили на заголовок вопроса. я просто почувствовал, что конструкция конструктора лучше подходит для его целей – seanmonstar

2

Если вы хотите использовать несколько экземпляров, звучит как конструктор может сделать вам некоторые хорошие.

function Template(element) { 
    this.blah = element; 
} 

Template.prototype.func2 = function(tagElement) { 
    //... 
}; 

var a = new Template($('form [name=data]').eq(0)); 
var b = new Template($('form [name=data2]').eq(0)); 

b.func2('form'); 

Все методы на прототипе функции (Template.prototype) будет доступен из каждого экземпляра, и каждый экземпляр области действия соответственно. Новое ключевое слово запустит функцию, а затем вернет вам новый объект, наследующий от прототипа.

У вас больше не будет такой же объектной точки a и b.

Смежные вопросы