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;
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM