如何克隆功能

时间:2019-05-24 03:37:28

标签: javascript

我正在尝试实现克隆功能,但不确定在尝试克隆'[object Function]'时是否执行正确。您将在底部看到结果。我不确定期望的结果是否应该看起来像原始输入数据。让我知道您的想法,以及您对如何实施它有任何想法。这是代码。

UPD :实际上,它可以正常工作。我将其保留在此处,以便人们在有相同问题时可以使用它。

function deep(value) {
  if (typeof value !== 'object' || value === null) {
    return value;
  }

  if (Array.isArray(value)) {
    return deepArray(value);
  }

  return deepObject(value);
}

function deepObject(source) {
  const result = {};

  Object.keys(source).forEach(key => {
    const value = source[key];

    result[key] = deep(value);
  });

  return result;
}

function deepArray(collection) {
  return collection.map(value => {
    return deep(value);
  });
}

const id1 = Symbol('id');
const value = {
  a: 2,
  f: id1,
  b: '2',
  c: false,
  g: [
    { a: { j: undefined }, func: () => {} },
    { a: 2, b: '2', c: false, g: [{ a: { j: undefined }, func: () => {} }] }
  ]
};

结果

{ a: 2,
  f: Symbol(id),
  b: '2',
  c: false,
  g:
   [ { a: { j: undefined }, func: [Function: func] },
     { a: 2,
       b: '2',
       c: false,
       g: [ { a: { j: undefined }, func: [Function: func] } ] } ] }

2 个答案:

答案 0 :(得分:1)

您无法克隆箭头函数,当克隆具有箭头函数作为属性的对象时,它们将始终绑定到创建它们的对象,因此无法重新绑定它们,这是箭头函数的全部内容,可以预见此对象的行为。如果要克隆对象,请确保引用该对象的所有功能都是常规功能,而不是箭头功能。

答案 1 :(得分:0)

最好在单个代码下使用以下代码进行深度复制-

isthai