0

可能重复:
如何使用变量字符串定义类名来制作 JavaScript 对象?

我希望能够以new编程方式调用事物。例如,如果我有这两个类:

class Bird
   constructor: (@name) ->

class Snake
   constructor: (@name) ->

我可以打电话s = new Snake("Sam")。现在,我想做的是

bird_class = "Bird"
b = new bird_class()

并且能够从字符串构造一个鸟对象。这在 CoffeeScript 或 Javascript 中可行吗?

4

2 回答 2

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');
于 2013-01-20T01:34:51.663 回答
0

我不是 Coffeescripter,但在 JavaScript 中你可以这样做:

 function MyClass() { ... constructor ... };
 function MyOtherClass() { ... other constructor ... };

 var theConstructor = something ? MyClass : MyOtherClass;

 var obj = theConstructor();

您可以获取对构造函数的引用并将其视为一个值,随心所欲地处理它。

如果你想按名字来做,那有点棘手。缺少使用eval()(如果你愿意,你可以这样做,并且如果你可以确定它对你的项目没有风险),那么不可能在 JavaScript 中获得对符号的引用。但是,如果它是对对象属性的引用,它确实有效。

于 2013-01-20T01:30:30.577 回答