说我正在这样做:
Foo = function () {};
o = Object.create(Foo, { p: {
value: 42,
writable: true,
enumerable: true,
configurable: true }
});
o.prototype.bar = function () {console.log("hello");};
var x = "o";
window.o = o;
Object.defineProperty(window[x], "foo", { value: 123});
问题:
有没有办法在o
上设置属性而不先将其添加到另一个对象(在本例中为窗口)?
答案 0 :(得分:1)
是的,另一种方式是eval
。但是,将对象作为属性添加到像您一样的对象确实是可行的方法,明确限制(“列入白名单”)可能的名称。当然你也可以使用if-else
或switch
,但这些写作很乏味。