function type(data) { return Object.prototype.toString.call(data).slice(8, -1).toLowerCase(); } function clone(source) { const t = type(source) if (t !== 'object' && t !== 'array') { return source } let target if (t === 'object') { target = {} for (let i in source) { if (source.hasOwnProperty(i)) { target[i] = clone(source[i]) // ! } } } else { target = [] for (let i = 0; i < source.length; i++) { target[i] = clone(source[i]) // ! } } return target } let a = { c: 1 } let b = clone(a) // 深拷贝 a.c = 2 console.log(a.c) // 2 console.log(b.c) // 1

  转载请注明: malred-blog

 上一篇
vue设计与实现 vue设计与实现
1. 权衡的艺术 “框架设计里到处都体现了权衡的艺术” 1.1 命令式和声明式 从范式上看,视图层框架通常分为命令式和声明式 jQuery 就是典型的命令式框架,命令式框架的一大特点是关注过程 声明式框架关注结果 声明式直
2023-06-23
下一篇 
现代JavaScript库开发 现代JavaScript库开发
1. 从零开发一个JavaScript库1.1 如何开始 如何确定要开发什么库呢? 从项目中寻找灵感,将项目中的一些功能进行抽象设计,提取通用逻辑,进行额外处理,形成一个公共库的原型;一般项目中也会存在一些公共函数和组件等,是很好的灵
2023-06-22
  目录