2011-04-07 51 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"}; 
相关问题