(共556篇)
全部分类

深拷贝案例
[ Case ] 

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
function isObj<T>(target: T) {
  return Object.prototype.toString.call(target).slice(8, -1) === 'Object';
}
interface MergeOne {
  [propName: string]: any
}
function mergeOne(target: MergeOne, source: MergeOne) {
  for (const k in source) {
    if (target[k] === undefined) {
      // 如果target中没有,就直接赋值
      target[k] = source[k];
      continue;
    }
    // 如果arget中有某个属性, 且是对象的时候, 通过递归赋值
    if (isObj(source[k])) {
      if (!isObj(target[k])) {
        target[k] = source[k]
        continue;
      }
      // 如果都是对象,就就递归赋值
      target[k] = mergeOne(target[k], source[k]);
      continue;
    }
    // 如果target中有某个属性, 且不是对象类型, 直接赋值
    target[k] = source[k];
  }
  return target;
}
export function deepClone(...rest: MergeOne[]): any {
  if (!rest.length) { return {} };

  let n: MergeOne = {};
  rest.forEach(item => {
    if (isObj(item)) {
      n = mergeOne(n, item)
    } else {
      console.warn(item,'is not an Object');
      
    }
  })
  return n
}