Last active
May 15, 2016 16:26
-
-
Save black-black-cat/1d6b109397b409b99318d647a6a2a081 to your computer and use it in GitHub Desktop.
扩展对象时,是否覆盖目标对象
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// @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