Javascript Coffeescript:动态创建调用方法的类的实例
我正在使用面向对象的coffeescript构建Node.js应用程序 我有一个带有静态方法的Javascript Coffeescript:动态创建调用方法的类的实例,javascript,oop,node.js,inheritance,coffeescript,Javascript,Oop,Node.js,Inheritance,Coffeescript,我正在使用面向对象的coffeescript构建Node.js应用程序 我有一个带有静态方法的超类,如: class RedisObject @find: (id, cb) -> client.HGETALL "#{@className()}|#{id}", (err, obj) => unless err cb(new RedisObject(obj, false)) 有这样一个子类 class User extends RedisObj
超类
,如:
class RedisObject
@find: (id, cb) ->
client.HGETALL "#{@className()}|#{id}", (err, obj) =>
unless err
cb(new RedisObject(obj, false))
有这样一个子类
class User extends RedisObject
在User类上调用find()
时,我希望它将User
的实例传递给回调函数,而不是RedisObject
我试图通过获取实际类的类名来实现这一点,方法是使用
@constructor.name
并使用eval()
从中生成一个实例,但问题是子类将在超类中未定义
如何实现根据调用的类获取find
方法返回的不同类型实例的行为,而不必在每个子类中重写它
@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%动态的。我不是咖啡脚本专家,但这不管用吗
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"
至少上面的测试似乎通过了。顺便说一句,“new this”没有文档化的功能,我在Classes部分找不到它。它真的很有用,应该特别说明。