1 #6

Merged
pamj3bxuk merged 1 commits from cunchu_zc into main 1 year ago

@ -32,29 +32,37 @@ var hasOwnProperty = Object.prototype.hasOwnProperty
*/
function merge(dest, src, redefine) {
// 检查目标对象dest是否存在如果不存在则抛出类型错误表明目标对象参数是必需的
if (!dest) {
throw new TypeError('argument dest is required')
throw new TypeError('argument dest is required');
}
// 检查源对象src是否存在如果不存在则抛出类型错误表明源对象参数是必需的
if (!src) {
throw new TypeError('argument src is required')
throw new TypeError('argument src is required');
}
// 如果redefine参数未被传入即值为undefined则将其默认设置为true
if (redefine === undefined) {
// Default to true
redefine = true
redefine = true;
}
// 遍历源对象src自身的所有可枚举属性名不包括继承属性
Object.getOwnPropertyNames(src).forEach(function forEachOwnPropertyName(name) {
// 如果redefine为false并且目标对象dest已经拥有当前遍历到的属性名对应的属性
// 那么跳过该属性的处理,直接进入下一次循环
if (!redefine && hasOwnProperty.call(dest, name)) {
// Skip desriptor
return
return;
}
// Copy descriptor
var descriptor = Object.getOwnPropertyDescriptor(src, name)
Object.defineProperty(dest, name, descriptor)
})
// 获取源对象src中当前属性名对应的属性描述符包括属性值、可写性、可枚举性、可配置性等信息
var descriptor = Object.getOwnPropertyDescriptor(src, name);
// 使用获取到的属性描述符在目标对象dest上定义同名属性实现将源对象的属性复制到目标对象上
Object.defineProperty(dest, name, descriptor);
});
return dest
}
// 返回合并后的目标对象dest此时它已经包含了从源对象复制过来的属性根据redefine规则
return dest;
}
Loading…
Cancel
Save