【问题标题】:Extending an object with multiple properties in JavaScript在 JavaScript 中扩展具有多个属性的对象
【发布时间】:2011-04-07 17:33:07
【问题描述】:

我有一个具有多个属性和函数的全局 JavaScript 对象,我正在以这种方式创建它:

myObject = {};

我认为我可以通过创建类似的东西来轻松扩展这个对象

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

而不是

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

我的方法有什么问题?

【问题讨论】:

  • 当你说“扩展”时。您的意思是向对象添加更多属性吗?还是您的 OOP “扩展”意思是由其他对象“继承”?
  • 我指的是对象本身而不是类

标签: javascript object


【解决方案1】:

当您编写myObject = { ... } 时,您正在创建一个全新的对象并将myObject 设置为指向它。
myObject 之前的值被丢弃。

相反,您可以使用 jQuery:

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

【讨论】:

  • 我想我应该采用这个解决方案,但我想知道它有多贵。我的物件很重
  • @user:这不会创建任何副本;它只是分配引用。它应该很快。
  • OP 询问的是 Javascript,而不是 jquery。它还带走了真正学习 Javascript 对象。
【解决方案2】:

如果没有 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 也在做同样的事情
  • 是的,我想这取决于您是否使用 jQuery。我使用服务器端 javascript,这允许在服务器和客户端上使用代码...
  • 谢谢。无论如何,我已经在使用 jQuery。实际上,我一直在寻找我们拥有 .NET 的部分类的概念,这样我就可以在多个文件中传播同一个对象。
【解决方案3】:

或者,更清洁的东西:

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"};

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-09-29
    • 1970-01-01
    • 2012-04-13
    • 2015-09-01
    • 2020-11-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多