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。