手写 $.extend
时间: 2023-09-10 12:13:15 浏览: 45
$.extend 是 jQuery 中的一个非常常用的函数,它用于将两个或多个对象合并为一个。实现一个简单的手写 $.extend 函数可以参考下面的代码:
```javascript
function isObject(obj) {
return Object.prototype.toString.call(obj) === '[object Object]';
}
function extend() {
let target = arguments[0] || {};
let len = arguments.length;
let i = 1;
let deep = false;
if (typeof target === 'boolean') {
deep = target;
target = arguments[1] || {};
i = 2;
}
if (!isObject(target)) {
target = {};
}
for (; i < len; i++) {
let options = arguments[i];
if (options != null) {
for (let name in options) {
let src = target[name];
let copy = options[name];
if (deep && copy && isObject(copy)) {
let clone = src && isObject(src) ? src : {};
target[name] = extend(deep, clone, copy);
} else if (copy !== undefined) {
target[name] = copy;
}
}
}
}
return target;
}
```
这个函数有一些细节需要注意:
- 参数可以是多个对象,也可以是一个布尔值和多个对象,用来表示是否深度合并。
- 如果第一个参数是布尔值,则表示是否深度合并,如果没有指定,则默认为浅合并。
- 如果合并的对象中有对象类型,则可以选择深度合并。
- 如果合并的对象中有重复的属性,则后面的属性会覆盖前面的属性。