1. 程式人生 > >js 物件克隆的三種方式

js 物件克隆的三種方式

js 物件克隆

把原來物件的屬性遍歷一遍,賦給一個新的物件

//深複製物件方法    
var cloneObj = function (obj) {  
    var newObj = {};  
    if (obj instanceof Array) {  
        newObj = [];  
    }  
    for (var key in obj) {  
        var val = obj[key];  
        //newObj[key] = typeof val === 'object' ? arguments.callee(val) : val; //arguments.callee 在哪一個函式中執行,它就代表哪個函式, 一般用在匿名函式中。  
newObj[key] = typeof val === 'object' ? cloneObj(val): val; } return newObj; }; //測試 var obj = {a:function(){console.log(this.b.c)},b:{c:1}},//設定一個物件 newObj = cloneObj(obj);//複製物件 newObj.b.c=2;//給新物件賦新值 obj.a();//1,不受影響 newObj.a();//2

將物件序列化再解析回來,物件中如果有函式function則不能正確複製

var obj = {a:1,b:2}  
var newObj = JSON.parse(JSON.stringify(obj));  
newObj.a=3;  
console.log(obj);  
console.log(newObj);

針對陣列物件的方法,用陣列方法concat一個空陣列

var a=[1,2,3];  
var b=a;  
var c=[].concat(a);  
a.push(4);  
console.log(b);  
console.log(c);