2011-04-07 74 views
12

我有多個屬性和功能,我創造它這樣一個全球性的JavaScript對象:擴展具有多個屬性的對象在JavaScript

myObject = {}; 

我以爲我可以很容易地通過創建類似擴展此對象這

myObject = { propA1 : null, ....., propAN : null}; 

代替

myObject.propA1 = null; 
myObject......; 
myObject.propAN = null; 

什麼問題用我的方法?

+0

當你說 「擴展」。你的意思是添加更多的屬性對象?或者你是否將OOP「擴展」爲其他對象的「繼承」? – 2011-04-07 17:41:25

+0

我是指對象本身,而不是類 – user385411 2011-04-07 18:07:51

回答

13

當你編寫myObject = { ... }時,你正在創建一個全新的對象,並設置myObject指向它。
以前的值myObject已被丟棄。

相反,你可以使用jQuery:

jQuery.extend(myObject, { newProperty: whatever }); 
+0

我想我應該去這個解決方案,但我想知道它是多麼昂貴。我的對象很重 – user385411 2011-04-07 18:09:36

+0

@user:這不會創建任何副本;它只是分配參考。它應該很快。 – SLaks 2011-04-07 18:22:34

+3

OP問及Javascript,而不是jquery。它也從真正學習Javascript對象中獲益。 – dman 2014-01-06 02:26:08

12

沒有jQuery的,你可以創建對象的數組,像這樣的東西:

[{'key': 'atuhoetu', 'value': 'uehtnehatn'},{...}] 

如果你不關心的兼容性,最近瀏覽器應該支持這一點:

var newObj = {prop1: 'val', prop2: 'val'}; 
Object.keys(newObj).forEach(function (item) { 
    myObject[item] = newObj[item]; 
}); 

這將遍歷newObject中的所有項目和將它們添加到myObj。

+0

非常優雅的解決方案,但我想jQuery Extend也是這樣做的 – user385411 2011-04-07 18:10:54

+2

是的,我猜這取決於你是否使用jQuery。我使用服務器端JavaScript,這允許代碼在服務器和客戶端上使用... – tjameson 2011-04-07 18:14:41

+0

謝謝。 反正我已經在使用jQuery了。其實,我一直在尋找.NET中的部分類的概念,所以我可以在多個文件中傳播相同的對象。 – user385411 2011-04-07 18:22:57

0

或者,更整潔:

function extend(target, source){ 
    for(prop in source){ 
     target[prop] = source[prop]; 
    } 
} 

如果你使用它的方式如下:

var objA = {a: "a"}; 
var objB = {b: "b", c: "c"}; 
extend(objA, objB); 

結果將是:

objA = {a: "a", b: "b", c: "c"}; 
相關問題