UNPKG

wfquery

Version:

like jQuery but just for new browser

70 lines (69 loc) 2.94 kB
/** * 将两个或更多对象的内容合并到第一个对象。 * 这里第一个对象以下称为:待扩展对象 * 后续对象称为:待合并对象 * * @param {boolean} isDeep 是否深度扩展, 默认不深度扩展, 首个参数为true进行深度扩展 * @param {Object} obj 可变参数,长度不为零。 * 长度为1时: 待扩展对象默认为执行方法的从属对象 wfQuery 或 wfQuery.fn * 长度为2+时: 第一个对象为待扩展对象, 从后面开始依次扩展属性到待扩展对象 * 如: var base = {a:1,b:[1,2,3],d:{d1:1,d2:2}}; * extend( base, {b:2}, {c:3}, {c:4,d:5}, {c:6,a:7} ); * 返回值 = base = {a:7,b:2,c:6,d:5}; * extend( true, base, {b:[2,5]}, {c:3}, {c:4,d:{d3:3}}, {c:6,a:7} ); * 返回值 = base = {a:7,b:[2,5,3],c:6,d:{d1:1,d2:2,d3:3}}; * @return {Object} 待扩展对象 */ wfQuery.extend = wfQuery.fn.extend = function (isDeep, obj) { var target = isDeep || {}; // 根据首个参数不同值,确定待合并对象组循环起始参数位置 var objIndex = 1; var length = arguments.length; var deep = false; if (typeof target === 'boolean') { deep = target; target = arguments[objIndex] || {}; objIndex++; } if (typeof target !== 'object' && !wfQuery.isFunction(target)) { target = {}; } if (objIndex === length) { target = this; objIndex--; } var name; var options; var src; var copy; var copyIsArray; var clone; for (var i = objIndex; i < length; i++) { if ((options = arguments[i])) { for (name in options) { if (!options.hasOwnProperty(name)) { break; } src = target[name]; copy = options[name]; if (target === copy) { continue; } if (deep && copy && (wfQuery.isPlainObject(copy) || (copyIsArray = wfQuery.isArray(copy)))) { if (copyIsArray) { copyIsArray = false; clone = src && wfQuery.isArray(src) ? src : []; } else { clone = src && wfQuery.isPlainObject(src) ? src : {}; } target[name] = wfQuery.extend(deep, clone, copy); } else if (copy !== undefined) { target[name] = copy; } } } } return target; };