这就是我想要完成的事情。我正在动态创建对象,我想将它们添加到“主容器”对象中。我目前正在使用容器数组,但有时我想通过名称而不是索引来访问这些对象。如:
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;
但这似乎违背了封装的想法。
谢谢。
答案 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,
});