动态地将Javascript对象存储在另一个对象中

时间:2013-03-15 04:14:35

标签: javascript object methods

这就是我想要完成的事情。我正在动态创建对象,我想将它们添加到“主容器”对象中。我目前正在使用容器数组,但有时我想通过名称而不是索引来访问这些对象。如:

function Scene() {
     this.properties;
}

Scene.prototype.addEntity = function(entity) {
    this.push(entity);
}


var coolNameForObject = { Params };
var Scene1 = new Scene();

Scene1.addEntity(coolNameForObject);

我知道.push不可用,仅适用于数组,但我厌倦了整天使用索引。我想用它的名字来引用每个实体。 e.g:

Scene1.coolNameForObject.property

但是想不到一个好方法。

也许有类似的东西:

coolNameForObject.name = 'coolNameForObject';
Scene1.(coolNameForObject.name) = coolNameForObject;

但是Dreamweaver上的语法很糟糕。我已经谷歌了,但是任何出现的东西都会通过数组更容易解决,而且我是我需要这些对象的知己,能够通过容器对象上的属性引用来调用对象就是这种方式去吧。

我可以完全跳过“addEntity()”,然后去

Scene1.coolNameForObject = coolNameForObject;

但这似乎违背了封装的想法。

谢谢。

2 个答案:

答案 0 :(得分:1)

Javascript对象的属性可以动态添加,并使用方括号语法直接或从变量命名:

var propName = "foo";
coolNameForObject[propName] = 'coolNameForObject';

coolNameForObject["bar"] = 'coolNameForObject';

Scene.prototype.addEntity = function(name, entity) {
    this[name] = entity;
}

答案 1 :(得分:0)

添加这样的属性并使其成为可枚举:true,这不会产生问题。 你可以轻松访问密钥。

 Object.defineProperty(obj, "key", {
  enumerable: true,
  configurable: true,
  writable: true,
 });