2012-02-04 2 views
0

Является ли это хорошей функцией клонирования для клонирования объекта рекурсивно?Является ли это нормальной функцией клона?

function clone(o) 
{ 
    function CloneObject(inObj) 
    { 
     for (i in inObj) 
     { 
      if(typeof inObj[i] == 'object') 
       this[i] = clone(inObj[i]); 
      else 
       this[i] = inObj[i]; 
     } 
    } 

    return new CloneObject(o); 
} 

Кроме того, я узнал, что это не работает с массивами. Как я могу клонировать массив?

+0

В этой теме много тем: http://stackoverflow.com/search?q=[javascript]+clone+object –

ответ

1

Он, конечно, не клонирует объект совершенно — клон не будет иметь прототип оригинала, и у него будут разные конструкторы, и если у оригинала есть какие-либо неизменяемые свойства, то это не скопирует их —, но вы спрашиваете, хорошо ли это «хорошо», и ответ на это может быть «да»: если то, что он делает, это все, что вам нужно, чтобы это сделать, тогда это абсолютно нормально.

Что касается клонирования массивов —, вы можете проверить, inObj.constructor == Array.

+0

На самом деле, я нашел лучшее решение здесь: http://my.opera.com /GreyWyvern/blog/show.dml/1725165 – LordZardeck

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