【发布时间】:2013-01-20 01:24:51
【问题描述】:
可能重复:
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 中可行吗?
【问题讨论】:
-
如果您确实在上述链接问题的答案中使用了该方法,请意识到您需要导出您的类,例如
window.Bird = Bird。 -
@icktoofay 感谢您的提醒。有没有办法在不导出类的情况下做到这一点?使用上述方法,会发生什么情况: 包含一个脚本。该脚本使用
window.Bird = Bird添加引用。然后用咖啡脚本我打电话给new window['Bird']?它有效,但如果有另一种方法会很有趣。 -
是的,但是如果没有
eval(这可能很危险并且会阻碍可能的优化),您必须将它们全部放在一个对象like numbers1311407's answer shows中。 -
@icktoofay 有没有办法扩展 var
bird_class以获取值,以便我可以调用 eval 呢?问题是我只有变量bird_class可以使用 -
@Scoop:是的,但我会这样做:
bird_class = eval bird_class_name; my_bird = new bird_class(arg1, arg2)或在一个声明中,new (eval bird_class_name)(arg1, arg2)。当然,可以省略参数,但更令人惊讶的是,如果没有参数,您可以省略参数括号。 (您不能省略(eval bird_class_name)周围的括号。)