SHOW:
|
|
- or go back to the newest paste.
1 | var clone = function (obj) { | |
2 | - | var copy = obj instanceof Array? [] : {}, |
2 | + | var copy = obj instanceof Array? [] : {}, // проверка дали сме подали масив или обект и създава празен такъв |
3 | key; | |
4 | ||
5 | for (key in obj) { | |
6 | - | if (obj.hasOwnProperty(key)) { |
6 | + | if (obj.hasOwnProperty(key)) { // проверка дали текущото пропърти е собствено или наследено (копираме само собствени) |
7 | - | if (typeof obj[key] === 'object') { |
7 | + | if (typeof obj[key] === 'object') { // проверка дали текущото пропърти е обект |
8 | - | if (obj[key] instanceof Array) { |
8 | + | if (obj[key] instanceof Array) { // проверка дали обекта е масив |
9 | - | copy[key] = []; |
9 | + | copy[key] = []; |
10 | } else { | |
11 | copy[key] = {}; | |
12 | } | |
13 | // текущото пропърти е обект/масив и извикваме рекурсивно clone() да го обходи и да го клонира | |
14 | - | copy[key] = clone(obj[key]); |
14 | + | copy[key] = clone(obj[key]); |
15 | } else { | |
16 | - | copy[key] = obj[key]; |
16 | + | copy[key] = obj[key]; // текущото пропърти е примитивен тип или функция и затова само си го копираме (by value) |
17 | } | |
18 | } | |
19 | } | |
20 | ||
21 | - | return copy; |
21 | + | return copy; // връщаме новото копие (при рекурсията връща текущото клонирано копие на пропъртито на себе си) |
22 | }; |