JavaScript 对象克隆的3种方式
2020-12-22 02:27
标签:object 创建 ack ring undefined 实现 gif 数据 exp JavaScript 并非绝对化的面向对象的语言,里面也有很多非结构化和结构化的数据。赋值语句并不能复制结构化的数据对象。 例如: JavaScript 对象克隆的3种方式 标签:object 创建 ack ring undefined 实现 gif 数据 exp 原文地址:https://www.cnblogs.com/montai/p/13217268.htmlvar 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;
}
上一篇:jq点击按钮添加元素到数组
下一篇:Java程序运行的整体流程
文章标题:JavaScript 对象克隆的3种方式
文章链接:http://soscw.com/index.php/essay/37469.html