omniclone:实现Javascript的对象深度克隆复制

19-01-06 banq
         

用于对象深度克隆的同构,可自定义和简单的javascript函数:

omniclone(source, config);

案例:

const omniclone = require('omniclone');
import omniclone from 'omniclone';

<p>[code]const obj = { foo: { bar: 'baz' } };
const obj2 = omniclone(obj);

obj2; // { foo: { bar: 'baz' } };
obj === obj2; // false
obj.foo === obj2.foo; // false
[/code]

优势

  1. 在复制属性之前自动调用对象构造函数(可自定义的行为)
  2. 让你在源和结果对象之间共享[[Prototype]]对象(可自定义的行为)
  3. 让你克隆带有循环引用的对象(可自定义的行为)
  4. 让你复制getter和setter,非enumerables属性以及符号symbols (可自定义的行为)
  5. 正确处理String,Boolean,Number,Error和Promise对象
  6. 安全,类似的sibilings兄弟邻居引用而不重复
  7. 正确克隆Array对象(如果invokeConstructors设置了标志)
  8. 正确克隆RegExp和Date对象