我有多个属性和功能,我创造它这样一个全球性的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