-
Notifications
You must be signed in to change notification settings - Fork 0
踩坑记录
npmstudy edited this page Dec 13, 2023
·
1 revision
export class Proxy extends Plugable implements Strategy {
public inject;
constructor(cfg?: any) {
super(Object.assign(ProxyDefaultConfig, cfg));
//this.app.use(this.compose([this.before(), this.mount(), this.default()]));
}
}
这段代码看着没问题的。如果cfg层级多于1层,就会报错,配置不生效。
Object.assign()拷贝的是属性值。假如源对象的属性值是一个对象的引用,那么它也只指向那个引用。也就是说,如果对象的属性值为简单类型(如string, number),通过Object.assign({},srcObj);得到的新对象为深拷贝;如果属性值为对象或其它引用类型,那对于这个对象而言其实是浅拷贝的。
最简单的做法是用lodash的merge。当然也可以自己写一个深拷贝
/**
* Simple object check.
* @param item
* @returns {boolean}
*/
export function isObject(item) {
return item && typeof item === 'object' && !Array.isArray(item);
}
/**
* Deep merge two objects.
* @param target
* @param ...sources
*/
export function mergeDeep(target, ...sources) {
if (!sources.length) return target;
const source = sources.shift();
if (isObject(target) && isObject(source)) {
for (const key in source) {
if (isObject(source[key])) {
if (!target[key]) Object.assign(target, { [key]: {} });
mergeDeep(target[key], source[key]);
} else {
Object.assign(target, { [key]: source[key] });
}
}
}
return mergeDeep(target, ...sources);
}