我有多個屬性和功能,我創造它這樣一個全球性的JavaScript對象:擴展具有多個屬性的對象在JavaScript
myObject = {};
我以爲我可以很容易地通過創建類似擴展此對象這
myObject = { propA1 : null, ....., propAN : null};
代替
myObject.propA1 = null;
myObject......;
myObject.propAN = null;
什麼問題用我的方法?
我有多個屬性和功能,我創造它這樣一個全球性的JavaScript對象:擴展具有多個屬性的對象在JavaScript
myObject = {};
我以爲我可以很容易地通過創建類似擴展此對象這
myObject = { propA1 : null, ....., propAN : null};
代替
myObject.propA1 = null;
myObject......;
myObject.propAN = null;
什麼問題用我的方法?
當你編寫myObject = { ... }
時,你正在創建一個全新的對象,並設置myObject
指向它。
以前的值myObject
已被丟棄。
相反,你可以使用jQuery:
jQuery.extend(myObject, { newProperty: whatever });
我想我應該去這個解決方案,但我想知道它是多麼昂貴。我的對象很重 – user385411 2011-04-07 18:09:36
@user:這不會創建任何副本;它只是分配參考。它應該很快。 – SLaks 2011-04-07 18:22:34
OP問及Javascript,而不是jquery。它也從真正學習Javascript對象中獲益。 – dman 2014-01-06 02:26:08
沒有jQuery的,你可以創建對象的數組,像這樣的東西:
[{'key': 'atuhoetu', 'value': 'uehtnehatn'},{...}]
如果你不關心的兼容性,最近瀏覽器應該支持這一點:
var newObj = {prop1: 'val', prop2: 'val'};
Object.keys(newObj).forEach(function (item) {
myObject[item] = newObj[item];
});
這將遍歷newObject中的所有項目和將它們添加到myObj。
非常優雅的解決方案,但我想jQuery Extend也是這樣做的 – user385411 2011-04-07 18:10:54
是的,我猜這取決於你是否使用jQuery。我使用服務器端JavaScript,這允許代碼在服務器和客戶端上使用... – tjameson 2011-04-07 18:14:41
謝謝。 反正我已經在使用jQuery了。其實,我一直在尋找.NET中的部分類的概念,所以我可以在多個文件中傳播相同的對象。 – user385411 2011-04-07 18:22:57
或者,更整潔:
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"};
當你說 「擴展」。你的意思是添加更多的屬性對象?或者你是否將OOP「擴展」爲其他對象的「繼承」? – 2011-04-07 17:41:25
我是指對象本身,而不是類 – user385411 2011-04-07 18:07:51