JavaScript 对象克隆的3种方式

Posted Montai

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JavaScript 对象克隆的3种方式相关的知识,希望对你有一定的参考价值。

javascript 并非绝对化的面向对象的语言,里面也有很多非结构化和结构化的数据。赋值语句并不能复制结构化的数据对象。

例如: 

var S1 = []
var A = obj(),
var B = obj();
Stack.push(A);
Stack.push(B);

Var S2 = []
S2 = S1;

S1是一个对象数组,里面放了两个对象数据A和B,在赋值操作的时候,A,B对象不会被创建,而只是指向A,B的链接。

下面三种方式,可以实现对象的克隆:
1、 如果你知道A,B的数据结构信息,直接写克隆函数,创建A,B中的类对象,子类对象,然后将S1这些对象条件到S2中去。

2、深度复制对象,将对象一层一层的扒开,迭代的方式将里面的实例创建并赋值。
//深复制对象方法
var cloneObj2 = function (obj) {
var newObj = {};
if (obj instanceof Array) {
newObj = [];
}
for (var key in obj) {
var val = obj[key];
newObj[key] = typeof val === ‘object‘ ? cloneObj2(val): val; // 如果是对象,迭代
    }
return newObj;
};

3. JSON将数据序列化,
function cloneObj(obj) {
//1
var newJsonObj = {};
newJsonObj = JSON.parse(JSON.stringify(obj));
//2
for (items in obj) {
if (typeof obj[items] == "function" || typeof obj[items] == "undefined" || obj[items] instanceof RegExp) {
newJsonObj[items] = obj[items];
}
}
//3
var newObj = new obj.constructor;
for (items in newJsonObj) {
newObj[items] = newJsonObj[items]
}
return newObj;
}

以上是关于JavaScript 对象克隆的3种方式的主要内容,如果未能解决你的问题,请参考以下文章

浅谈Javascript 中几种克隆(clone)方式

克隆一个 JavaScript 对象? [复制]

克隆对象的几种方法

JavaScript 克隆对象

26.JavaScript实现对象混合与对象浅度克隆和对象的深度克隆

3.原型模式