可能重复:
How do I make JavaScript Object using a variable String to define the class name?
我希望能够以编程方式调用new
。例如,如果我有这两个类:
class Bird
constructor: (@name) ->
class Snake
constructor: (@name) ->
我可以致电s = new Snake("Sam")
。现在,我想做的是
bird_class = "Bird"
b = new bird_class()
并且能够从字符串构造鸟对象。这可能在CoffeeScript或Javascript中吗?
答案 0 :(得分:2)
如果你将课程保存在一个对象中,你可以随时:
var animals = {
Snake: Snake,
Bird: Bird
};
new animals["Snake"]();
根据你的评论,这样的一些模式可以让你注册课程 在飞行中。它是原始的,但可能会给你一个想法:
var zoo = {
animals: {},
add: function (animal) {
this.animals[animal.name] = animal;
},
make: function(name) {
if (this.animals[name]) {
return new this.animals[name]();
}
}
};
function Snake() {};
zoo.add(Snake);
var snake = zoo.make('Snake');
答案 1 :(得分:0)
我不是Coffeescripter,但在JavaScript中你可以这样做:
function MyClass() { ... constructor ... };
function MyOtherClass() { ... other constructor ... };
var theConstructor = something ? MyClass : MyOtherClass;
var obj = theConstructor();
你可以抓住对构造函数的引用并将其视为一个值,然后随意处理它。
如果你想通过 name 来做,那么,这有点棘手。没有使用eval()
(如果你愿意,你可以做,如果你可以确定它对你的项目没有风险),那么就不可能在JavaScript中获得像这样的引用。但它确实有效,如果它是对象属性的引用。