Skip to content

Instantly share code, notes, and snippets.

@Yipee-ki-yay
Created March 28, 2019 06:42
Show Gist options
  • Save Yipee-ki-yay/6903adf543896efe91a28aad3e30635d to your computer and use it in GitHub Desktop.
Save Yipee-ki-yay/6903adf543896efe91a28aad3e30635d to your computer and use it in GitHub Desktop.
Наследование копированием свойств
/* Поверхностное копирование */
function extend(parent, child) {
var i;
child = child || {};
for (i in parent) {
if(parent.hasOwnProperty(i)) {
child[i] = parent[i];
}
}
return child;
}
var dad = { name: "Adam" };
var kid = extend(dad);
kid.name; // "Adam";
//
var dad = {
counts: [1, 2, 3],
reads: {paper: true},
};
var kid = extend(dad);
kid.counts.push(4);
dad.counts.toString(); // "1, 2, 3, 4"
dad.reads === kid.reads; // true
/* Полное копирование */
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;
dad.reads.paper; // true
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment