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

标签 javascript oop node.js inheritance coffeescript

我正在使用面向对象的 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/

相关文章:

PHP,下拉菜单和搜索表单,如何传递变量来选择查询

javascript - 如何连接对象是useState数组?

java - 使用 While 与 If 防止数组中出现重复的整数 ID 号

java - 微调器列表项

java - Sub2 复制构造函数如何自动从 Sub1 复制新的成员变量?

node.js - NodeJS Hbase 节俭怪异

javascript - 为什么功能组件中没有声明更新

javascript - 等待 jquery 中两个值发生变化

javascript - 在 Node.js 中使用 Import 命令

node.js - Node 子进程生成标准输出返回为空