Coffeescript:动态创建调用方法的类的实例

Mat*_*ias 5 javascript oop inheritance node.js coffeescript

我正在使用面向对象的coffeescript构建Node.js应用程序.

我有一个super class静态方法,如:

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

有一个类似的子类

  class User extends RedisObject
Run Code Online (Sandbox Code Playgroud)

当我调用find()时,User class我希望它传递一个实例User而不是RedisObject回调函数.

我试图通过使用调用方法来获取实际类的类名来实现这一点

@constructor.name
Run Code Online (Sandbox Code Playgroud)

并用于eval()从中生成实例 - 但问题是从超类中未定义子类.

如何find根据调用它的类来实现获取方法返回的不同类型实例的行为,而不必在每个子类中重写它?

jev*_*lio 6

我不是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"
Run Code Online (Sandbox Code Playgroud)

至少上述测试似乎已经过去了.