抽象一个参数扩展库 发表于 2023-02-21 1234567891011121314151617181920212223242526272829303132import { type } from '@jslib-book/type'import { clone } from '@jslib-book/clone'function hasOwnProp(obj, key) { return Object.prototype.hasOwnProperty.call(obj, key)}export function extend(defaultOpt, customOpt) { defaultOpt = clone(defaultOpt) // 拷贝一份defaultOpt,隔离数据 for (let name in customOpt) { const src = defaultOpt[name] const copy = customOpt[name] // 非可枚举属性 直接停止 if (!hasOwnProp(customOpt, name)) { continue } if (copy && type(copy) === 'object') { // 如果default上不存在值时,会自动创建空对象 const clone = src && type(src) === 'object' ? src : {} // 递归合并 defaultOpt[name] = extend(clone, copy) } else if (typeof copy !== 'undefined'){ // 非对象类型且值不为undefined的时候 defaultOpt[name] = copy } } return defaultOpt}