オブジェクト指向の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
を呼び出すときにfind()、コールバック関数の代わりにのUser classインスタンスを渡したいです。UserRedisObject
を使用してメソッドが呼び出される実際のクラスのクラス名を取得することで、これを実現しようとしました
@constructor.name
それからインスタンスを生成するために使用eval()しますが、問題は、サブクラスがスーパークラス内から未定義になることです。
find各サブクラスでオーバーライドすることなく、メソッドが呼び出されたクラスに応じて、メソッドによって返されるさまざまなタイプのインスタンスを取得する動作をどのように実現できますか?