2019-01-29 对象拷贝

oldObj = {
  prop: 'old',
  sonObj: {
    name: 'old'
  }
}

已经分不清什么浅拷贝了

浅拷贝

newObj111 = oldObj

一级拷贝

newObj222 = Object.assign({}, oldObj,{prop1: '1'})      // sunObj 仍然引用的地址
newObj222.__proto__
// {constructor: ƒ, __defineGetter__: ƒ, __defineSetter__: ƒ, hasOwnProperty: ƒ, __lookupGetter__: ƒ, …}

newObj333 = Object.create(oldObj)  // 创建的对象拥有明确的原型
newObj333.__proto__
// {name: "xiaoming", age: 23, sonObj: {…}}age: 23name: "xiaoming"sonObj: {name: 3}__proto__: Object
underscore
var obj = _.cloneDeep(oldObj);

深拷贝

json 装换
// 不能转换 function 和 regExp
var obj1 = { fun: function(){ console.log(123) } };
var obj2 = JSON.parse(JSON.stringify(obj1));
// {}
函数
function deepClone (oldObj) {
  let newObj = {}
  for (let i in oldObj) {
    const value = oldObj[i]
    if (typeof value === 'Object' || typeof value === 'Array') {
        newObj[i] = deepCopy(value)
    } else {
        newObj[i] = oldObj[i]
    }
  }
  return newObj
}
newObj444 = deepClone(oldObj)
函数改版(最佳实践)

jQuery
var obj = $.extend(true, {}, oldObj);
Lodash
var obj = _.cloneDeep(oldObj);

内容浅显,欢迎纠错补充

你可能感兴趣的:(2019-01-29 对象拷贝)