2010-11-04 2 views
0

Есть ли быстрый способ «супер» глубокого клонирования узла, включая его свойства? (И методы, я думаю)javascript cloneNode и свойства

У меня есть что-то вроде этого:

var theSource = document.getElementById("someDiv") 
theSource.dictator = "stalin"; 

var theClone = theSource.cloneNode(true); 

alert(theClone.dictator); 

Новый клонированный объект не имеет dictator свойство. Теперь, скажем, у меня есть тысяча свойств, связанных с theSource - как я могу (неявно) передавать/копировать их в клон?

// EDIT

@Fabrizio

Ваш hasOwnProperty ответ не работает должным образом, поэтому я настроил его. Это решение, которое я искал:

temp = obj.cloneNode(true); 

for(p in obj) { 
    if(obj.hasOwnProperty(p)) { eval("temp."+p+"=obj."+p); } 
} 

ответ

2

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

thesource.myproperties = {} 
thesource.myproperties.dictator1 = "stalin"; 
thesource.myproperties.dictator2 = "ceasescu"; 
thesource.myproperties.dictator3 = "Berlusconi"; 
... 

, то вы должны скопировать только одно свойство

theclone.myproperties = thesource.myproperties 

в противном случае сделать for цикл для всех свойств, сохраняемые

for (p in thesource) { 
    if (thesource.hasOwnProperty(p)) { 
    theclone.p = thesource.p; 
    } 
}