1. 程式人生 > >[log] js物件拷貝

[log] js物件拷貝

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解除與函式名的耦合 } }

原理

使用引用型別時,宣告的變數儲存的是引用型別在記憶體中的地址