obj用老师给的代码进行深拷贝时,遇到function就不行了

来源:2-2 typeof和深拷贝

古墨凝

2020-06-08

请问怎么拷贝函数呢?

function deepClone(obj = {}) {
  if (typeof obj !== 'object' || obj == null) {
    return obj // 这里如果是function就不行了,obj1改,obj2也会跟着改
  }
  
  let res
  // 这里用Object.Prototype.toString.call+typeof更加合适 
  if (obj instanceof Array) {
    res = []
  } else {
    res = {}
  }
  
  for (let key in obj) {
    if (obj.hasOwnProperty(key)) {
      res[key] = deepClone(obj[key])
    }
  }
  return res
}
写回答

1回答

双越

2020-06-08

深拷贝的目的,是拷贝数据对吧?

而 function 不是数据,是可执行模块,所以一般不会作为数据来存储,也一般不用于深拷贝中。

如果非要用于深拷贝,那也只能是如代码一样。

1
0

BAT大牛带你横扫初级前端JavaScript面试(第二版)

BAT高级前端工程师亲授,结合真实面试题,提高面试成功几率

4268 学习 · 817 问题

查看课程