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种方式的主要内容,如果未能解决你的问题,请参考以下文章