View difference between Paste ID: j8f9Kn8U and cTzsTrKX
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
    };