Williammer
6/7/2014 - 3:41 PM

jsPatterns.deepExtendObject.js - deeply copy property from the parent. (merely the object property)

jsPatterns.deepExtendObject.js - deeply copy property from the parent. (merely the object property)

function extendDeep(parent, child) {
    var i,
    toStr = Object.prototype.toString,
        astr = "[object Array]";
    child = child || {};
    for (i in parent) {
        if (parent.hasOwnProperty(i)) {
            if (typeof parent[i] === "object") {
                child[i] = (toStr.call(parent[i]) === astr) ? [] : {};
                extendDeep(parent[i], child[i]);
            } else {
                child[i] = parent[i];
            }
        }
    }
    return child;
}

var dad = {
    counts: [1, 2, 3],
    reads: {
        paper: true
    }
};
var kid = extendDeep(dad);
kid.counts.push(4);
kid.counts.toString(); // "1,2,3,4"
dad.counts.toString(); // "1,2,3"
dad.reads === kid.reads; // false
kid.reads.paper = false;
kid.reads.web = true;
document.body.innerHTML = dad.reads.paper; // true