js实现jquery extend


实现 jQuery 的 extend 功能
jQuery 的 extend 方法用于合并多个对象的属性到目标对象中。以下是一个纯 JavaScript 的实现方式:
function extend() {
let target = arguments[0] || {};
let length = arguments.length;
let deep = false;
let i = 1;
if (typeof target === 'boolean') {
deep = target;
target = arguments[1] || {};
i = 2;
}
if (typeof target !== 'object' && typeof target !== 'function') {
target = {};
}
for (; i < length; i++) {
let options = arguments[i];
if (options != null) {
for (let name in options) {
if (options.hasOwnProperty(name)) {
let src = target[name];
let copy = options[name];
if (deep && copy && typeof copy === 'object') {
let clone = src && typeof src === 'object' ? src : Array.isArray(copy) ? [] : {};
target[name] = extend(deep, clone, copy);
} else if (copy !== undefined) {
target[name] = copy;
}
}
}
}
}
return target;
}
使用方法
// 浅拷贝
let obj1 = { a: 1 };
let obj2 = { b: 2 };
let result = extend(obj1, obj2);
// result: { a: 1, b: 2 }
// 深拷贝
let deepObj1 = { a: { b: 1 } };
let deepObj2 = { a: { c: 2 } };
let deepResult = extend(true, deepObj1, deepObj2);
// deepResult: { a: { b: 1, c: 2 } }
功能说明
- 第一个参数为
true时表示深拷贝 - 可以合并多个对象的属性
- 会跳过
null和undefined值 - 支持对象和数组的递归合并
- 返回合并后的目标对象
注意事项
- 该实现不处理循环引用的情况
- 对于特殊对象类型(如 Date、RegExp 等)会进行浅拷贝
- 原型链上的属性不会被拷贝






