Skip to content

Instantly share code, notes, and snippets.

@black-black-cat
Last active May 15, 2016 16:26
Show Gist options
  • Save black-black-cat/1d6b109397b409b99318d647a6a2a081 to your computer and use it in GitHub Desktop.
Save black-black-cat/1d6b109397b409b99318d647a6a2a081 to your computer and use it in GitHub Desktop.
扩展对象时,是否覆盖目标对象
// @param {Boolean} defaults 默认不传参,为undefined,目标对象的已有属性不被覆盖;为true,则可以被覆盖
function createAssigner(defaults) {
function extend(obj) {
for (var i = 1; i < arguments.length; i++) {
var def = arguments[i];
for (var key in def) {
if (!defaults || obj[key] === void 0) {
obj[key] = def[key];
}
}
}
return obj;
}
return extend;
}
// @param {Boolean} covered 默认为true,则目标对象的已有属性可以被覆盖;为false,则不可以被覆盖
function createAssigner(covered) {
if (covered !== false) {
covered = true;
}
function extend(obj) {
var length = arguments.length;
if (length < 2 || obj == null) {
return obj;
}
for (var i = 1; i < arguments.length; i++) {
var def = arguments[i];
for (var n in def) {
if (covered) {
obj[n] = def[n];
} else if (obj[n] === void 0) {
obj[n] = def[n];
}
// 也可以写成
/*
if (covered || obj[n] === void 0) {
obj[n] = def[n];
}
*/
}
}
return obj;
}
return extend;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment