2016-03-27 16 views
0

のインスタンスメソッドからの静的メンバを参照私は動的にそうように、コンフィギュレーション・オブジェクトを所与延びるベースES6クラス有する:抽象モデルにsave()方法において動的に拡張JSクラス

class Model { 
    constructor() { 
    // ... 
    } 

    save() { 
    // ... 
    } 
} 

function createModelFromConfig (config) { 
    const Impl = class extends Model {}; 
    Object.assign(Impl, config); 
    return Impl; 
} 

const User = createModelFromConfig({store: new DbStore()}); 

、私は」をモデルを拡張するクラスに存在する静的オブジェクトstoreを参照したいと思います。これはもちろん、静的メンバーを参照する必要があることを意味しますが、拡張クラスは匿名です。

ちょうどクロームコンソールを使用して簡単なテストでは、私は

を試してみました
function X() {} 
X.prototype.doSomething = function() { console.log(this.constructor); }; 
function Y() {} 
Y.prototype = Object.create(X.prototype); 
new Y().doSomething(); // function X() {} 

、これは信頼性の高いテストである場合、私は知りませんが、それはthis.constructorは私が拡張するImplを参照していないように見えるが、代わりに、元の基本クラス、これは役に立ちません。

Impl.prototype.Impl = Impl;を追加するのがあまりお役に立たないので、私の保存機能でthis.Impl.storeを使用することができますが、これを使わずにImplクラスの静的メンバーにアクセスできるのが望ましいでしょう。

コンソールの私のプロトタイプテストは不十分ですか?または、継承されたメソッドからインスタンスメソッドのコンストラクタークラスにアクセスする他の方法はありますか?

答えて

0

私のテストでは、Y.prototype = Object.create(X.prototype);は、ES6 extendsの実装に相当するものではないと結論付けました。ノードREPLで実行中で

class X { 
    constructor() {} 
    save() { console.log(this.constructor.z); } 
} 
class Y extends X {} 
Y.z = 'z'; 
new Y().save(); // 'z'