2011-10-18 104 views
0

是否有將一個對象的屬性複製到另一個對象的簡單方法。將對象的屬性附加到另一個對象的最佳方式

例如

var a = { 
    afunc: function(bla) { 
    alert('hello ' + bla); 
    }, 
    avalue: 'aaa' 
}; 

var b = { 
    bfunc: function(blb) { 
    alert('hi ' +blb); 
    }, 
    bvalue: 'bbb' 
}; 

magically_copy_a_to_b(a,b); 
b.afunc('world'); 

應該通過的屬性打印的hello world

+0

我不確定你的意思。你在對象文字中有'var'語句,並使用'='而不是':'。 – pimvdb

回答

0

您可以使用underscore.js具有內置extend功能:

_.extend(b, a); // merge a into b 

然後,你可以這樣做:

b.afunc('hello'); 
1

枚舉,然後在b處設置的屬性。注意:對象是通過引用傳遞的,並且不是複製的。

複製:

  • 數字,字符串,布爾 - COPIED
  • 陣列:使用copiedArray = array.slice()複製陣列array
  • 簡單的函數(不涉及的範圍,比如在你的例子) :
    copiedFunc = eval(originalFunc.toString())

 

function magically_copy_a_to_b(a,b){ 
    for(var prop in a){ 
     /* Example: copying all string properties*/ 
     if(typeof prop[a] == "string"){ 
      b[prop] = prop[a]; 
     } 
    } 
} 
0

我認爲你做了很多混淆,無論如何我糾正了你的對象(沒有var和使用:),這通過枚舉一個對象的屬性並將它們添加到另一個(避免原型鏈)

function magically_copy_a_to_b(org, dest){ 
    for (var prop in org){ 
     if (org.hasOwnProperty(prop)){ 
      dest[prop] = org[prop]; 
     } 
    } 
    return dest; 
} 
var a = { 
    afunc: function(bla) { 
    alert('hello ' + bla); 
    }, 
    avalue: 'aaa' 
}; 

var b = { 
    bfunc: function(blb) { 
    alert('hi ' +blb); 
    }, 
    bvalue: 'bbb' 
}; 

b = magically_copy_a_to_b(a,b); 


b.afunc('world'); 
0

此方法將json對象的屬性永久添加到另一個。由於JS是一種腳本語言,「eval」函數可以用較短的代碼保存一天!最後,我使用了json,因爲在「for(var obj1 in obj2)」中,它返回每個定義到obj1中的鍵,並且處理更大的代碼中的json比使用簡單的數組更有趣。例如,對一組json對象進行排序非常簡單,並且您不必使用邪惡的「我」來獲取某些東西。

function magically_copy_properties(jsonFrom,jsonTo) { 
    for (var key in jsonFrom) { 
     eval([ 
      "jsonTo.",key,"=jsonFrom.",key 
     ].join("")); 
    } 
} 

var a = { 
    "a1": function() { 
     return "hello"; 
    }, 
    "a2": function() { 
     return "hey"; 
    }, 
    "aSpace": function() { 
     return " "; 
    } 
} 

var b = { 
    "b1": function() { 
     return "ho"; 
    }, 
    "b2": function() { 
     return "world"; 
    } 
} 

magically_copy_properties(a,b); 
alert(b.a1() + b.aSpace() + b.b2()); 
相關問題