Advertisement
cherokee

Clone object (deep copy)

Jul 23rd, 2014
302
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1.     var clone = function (obj) {
  2.         var copy = obj instanceof Array? [] : {},  // проверка дали сме подали масив или обект и създава празен такъв
  3.             key;
  4.  
  5.         for (key in obj) {
  6.             if (obj.hasOwnProperty(key)) {   // проверка дали текущото пропърти е собствено или наследено (копираме само собствени)
  7.                 if (typeof obj[key] === 'object') {    // проверка дали текущото пропърти е обект
  8.                     if (obj[key] instanceof Array) {    // проверка дали обекта е масив
  9.                         copy[key] = [];    
  10.                     } else {
  11.                         copy[key] = {};
  12.                     }
  13.             // текущото пропърти е обект/масив и извикваме рекурсивно clone() да го обходи и да го клонира
  14.                     copy[key] = clone(obj[key]);  
  15.                 } else {
  16.                     copy[key] = obj[key];  // текущото пропърти е примитивен тип или функция и затова само си го копираме (by value)
  17.                 }
  18.             }
  19.         }
  20.  
  21.         return copy;   // връщаме новото копие (при рекурсията връща текущото клонирано копие на пропъртито на себе си)
  22.     };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement