我正在使用面向对象的 coffeescript 构建 Node.js 应用程序。
我有一个父类(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 类
上调用 find()
时,我希望它传递 User
的实例而不是 RedisObject
到回调函数。
我试图通过获取调用该方法的实际类的类名来实现这一点
@constructor.name
并使用 eval()
从中生成一个实例 - 但问题是子类将在父类(super class)中未定义。
如何实现根据调用它的类获取 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"
至少上面的测试似乎通过了。
关于javascript - Coffeescript:动态创建调用方法的类的实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14172887/