JS克隆对象的三种方法

作者: deepwinter 分类: 前端 发布时间: 2019-05-22 15:20 点击量: 554 次阅读

在js代码中,由于对象是引用类型,如果直接var obj2 = objobj2obj是共享同一个对象实体的,这往往不是我们想要的结果。
我们给出以下拷贝对象的方法:


通用对象克隆方法

function clone(obj){
  let temp = null;
  if(obj instanceof Array){
    temp = obj.concat();
  }else if(obj instanceof Function){
    //函数是共享的是无所谓的,js也没有什么办法可以在定义后再修改函数内容
    temp = obj;
  }else{
    temp = new Object();
    for(let item in obj){
      let val = obj[item];
      temp[item] = typeof val == 'object'?clone(val):val; //这里也没有判断是否为函数,因为对于函数,我们将它和一般值一样处理
    }
  }
  return temp;
}

整个clone函数的思路可能有点乱,但是可以这样理顺:
objvalue当做只有普通值、数组和函数,先按部就班地处理,然后再考虑之前的“普通值”有可能是object,所以这里做个判断,在递归一下clone函数就可以了。

值得注意的是,官方有一种方法可以生成新的函数实例,就是bind()

function aaa(){
    console.log(this);
};

var c = aaa;
var d = aaa.bind(); //bind如果不传东西,默认是window对象

c === aaa; //true
d === aaa; //false

JSON对象序列化方法

这个方法明显是简单得多,但是有个弊端,就是不能复制函数

var obj = {a:1,b:2}  
var newObj = JSON.parse(JSON.stringify(obj)); 

ES6新方法Object.assign

var obj = {a:1,b:2}  
var newObj = Object.assign({}, obj)

转自:http://www.cnblogs.com/amiezhang/p/8023731.html

如果觉得我的文章对您有用,请随意赞赏。您的支持将鼓励我继续创作!

发表评论

电子邮件地址不会被公开。 必填项已用*标注