萧十郎
如果没有必要的话,直接 JSON.parse(JSON.stringify(obj)) 最好了,下面的代码,应该是深克隆,包括数据,访问器,和Symbol 属性,来源 MDNvar obj = { foo: 1, get bar() { return 2; }};// 下面这个函数会拷贝所有自有属性的属性描述符function completeAssign(target, ...sources) { sources.forEach(source => { let descriptors = Object.keys(source).reduce((descriptors, key) => { descriptors[key] = Object.getOwnPropertyDescriptor(source, key); return descriptors; }, {}); // Object.assign 默认也会拷贝可枚举的Symbols Object.getOwnPropertySymbols(source).forEach(sym => { let descriptor = Object.getOwnPropertyDescriptor(source, sym); if (descriptor.enumerable) { descriptors[sym] = descriptor; } }); Object.defineProperties(target, descriptors); }); return target;}var copy = completeAssign({}, obj);console.log(copy);// { foo:1, get bar() { return 2 } }