UNPKG

bbo

Version:

bbo is a utility library of zero dependencies for javascript.

55 lines (42 loc) 1.2 kB
import isObject from './is_object.js'; import './get_tag.js'; import isArray from './is_array.js'; import isFunction from './is_function.js'; import isBoolean from './is_boolean.js'; function extend() /* [deep], obj1, obj2, [objn] */ { var args = [].slice.call(arguments); var deep = false; if (isBoolean(args[0])) { deep = args.shift(); } var result = args[0]; if (isUnextendable(result)) { throw new Error('extendee must be an object'); } var extenders = args.slice(1); var len = extenders.length; for (var i = 0; i < len; i++) { var extender = extenders[i]; for (var key in extender) { if (extender.hasOwnProperty(key)) { var value = extender[key]; if (deep && isCloneable(value)) { var base = isArray(value) ? [] : {}; result[key] = extend(true, result.hasOwnProperty(key) && !isUnextendable(result[key]) ? result[key] : base, value); } else { result[key] = value; } } } } return result; } function isCloneable(obj) { return isArray(obj) || isObject(obj); } function isUnextendable(val) { return !val || !isObject(val) && !isFunction(val); } export default extend;