码迷,mamicode.com
首页 > 编程语言 > 详细

JavaScript 对象克隆的3种方式

时间:2020-07-01 09:35:18      阅读:123      评论:0      收藏:0      [点我收藏+]

标签:object   创建   ack   ring   undefined   实现   gif   数据   exp   

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种方式

标签:object   创建   ack   ring   undefined   实现   gif   数据   exp   

原文地址:https://www.cnblogs.com/montai/p/13217268.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!