Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Coffeescript:动态创建调用方法的类的实例_Javascript_Oop_Node.js_Inheritance_Coffeescript - Fatal编程技术网

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

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

我正在使用面向对象的coffeescript构建Node.js应用程序

我有一个带有静态方法的
超类
,如:

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部分找不到它。它真的很有用,应该特别说明。