一个功能可以用尾递归实现是不是可以用循环实现的充要条件?

我想用js以循环或者尾递归的方式实现对字面量对象的深克隆,请问如何实现?

守着星空守着你
浏览 480回答 1
1回答

萧十郎

如果没有必要的话,直接 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 } }
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript