[log] js物件拷貝
阿新 • • 發佈:2018-12-12
js物件拷貝
深拷貝
var clone = function (obj) {
if(obj === null) return null
if(typeof obj !== 'object') return obj;
if(obj.constructor===Date) return new Date(obj);
var newObj = new obj.constructor (); //保持繼承鏈
for (var key in obj) {
if (obj.hasOwnProperty(key)) {
//不遍歷其原型鏈上的屬性
var val = obj[key];
newObj[key] = typeof val === 'object' ? arguments.callee(val) : val;
// 使用arguments.callee解除與函式名的耦合
}
}
return newObj;
};
淺拷貝
var obj = this.addresslist[i];
for (var key in obj ){
if (obj.hasOwnProperty(key)) {
var val = obj[key];
this.elinfo[key] = typeof val === 'object' ? arguments.callee(val) : val;
// 使用arguments.callee解除與函式名的耦合
}
}
原理
使用引用型別時,宣告的變數儲存的是引用型別在記憶體中的地址