0

重複の可能性:
変数 String を使用してクラス名を定義する JavaScript オブジェクトを作成するにはどうすればよいですか?

newプログラムで物事を呼び出すことができるようにしたい。たとえば、次の 2 つのクラスがあるとします。

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();

コンストラクターへの参照を取得し、それを値として扱い、好きなように操作できます。

nameで実行したい場合は、少しトリッキーです。使用eval()しない限り (必要に応じて実行でき、プロジェクトにとって危険ではないと判断できる場合)、JavaScript でシンボルへのそのような参照を取得することはできません。ただし、オブジェクトのプロパティへの参照である場合は機能します。

于 2013-01-20T01:30:30.577 に答える