刚上手TypeScript,想将一个之前用es6写的深度拷贝方法用TS改写,改到一半,遇到一点小问题又毫无头绪。就是给一个可能是空对象或空数组的对象添加属性时,字符串索引值的问题,大伙帮忙给把把脉,或者有更优雅的写法,谢谢哈。
es6源码如下:
/**
* deepCopy(),对象深拷贝
* @param {Object} origin
* @param {Boolean} copyPrototypeProperKeyFlag,是否拷贝原型,默认 false
*/
deepCopy(origin, copyPrototypeProperKeyFlag = false) {
if(typeof origin !== 'object') return origin;
const obj = Array.isArray(origin) ? [] : {};
let pro;
copyPrototypeProperKeyFlag && Object.getPrototypeOf(origin) && (pro = Object.getPrototypeOf(origin));
const properNames = Object.getOwnPropertyNames(origin);
properNames.length && properNames.forEach(item => {
if(typeof origin[item] === 'object') {
return obj[item] = this.deepCopy(origin[item], copyPrototypeProperKeyFlag);
}
obj[item] = origin[item];
})
pro && Object.setPrototypeOf(obj, pro)
return obj;
}