Coffeescript:dynamic创build一个方法被调用的类的实例

我正在使用面向对象的coffeescript构build一个Node.js应用程序。

我有一个super class的静态方法super class

 class RedisObject @find: (id, cb) -> client.HGETALL "#{@className()}|#{id}", (err, obj) => unless err cb(new RedisObject(obj, false)) 

有一个像这样的子类

  class User extends RedisObject 

当我在User class上调用find()时,我希望它将User的实例而不是RedisObject传递给callback函数。

我试图通过使用获取调用方法的实际类的类名来实现此目的

 @constructor.name 

并使用eval()从它生成一个实例 – 但问题是,子类将在超类内未定义。

我怎样才能实现获取不同types的实例返回的行为取决于哪个类被调用,而不必在每个子类中重写?

我不是CoffeeScript的专家,但不会工作吗?

 class RedisObject whoami: () -> "I am a RedisObject" @find: () -> new this() class User extends RedisObject whoami: () -> "I am a User" console.log RedisObject.find().whoami() // -> "I am a RedisObject" console.log User.find().whoami() // -> "I am a User" 

至less上面的testing似乎通过了。

 @find: (id, cb,klass=RedisObject) -> client.HGETALL "#{@className()}|#{id}", (err, obj) => unless err cb(new klass(obj, false)) 

并在子类中

 @find: (id, cb,klass=User) -> super(id,cd,klass) 

这就是我会做,虽然它不是100%的dynamic。