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根据调用它的类来实现获取方法返回的不同类型实例的行为,而不必在每个子类中重写它?
我不是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)
至少上述测试似乎已经过去了.