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 | }; |