2

モデル ファクトリに渡されるストア (MongoDB / Redis など) のインスタンスを使用するモデル (バックボーン モデルに類似) のコンストラクタがあります。モデルのコンストラクター内で、

this.store = options.store; 

this.storeでインスタンスを構築すると、ストアが利用できるようになりましたvar model = new Model()

次に、モデルに「パブリック」メソッドがある場合、たとえばModel.find()モデルをインスタンス化せずに機能する状況に直面しました。しかし、インスタンス化されていないため、 Model 内の関数は store by にアクセスできませんthis.store

私がやったことはModel.store = options.store、問題を解決するコンストラクター自体にもストアを追加し始めたことです。しかし今、ストアは Model コンストラクターを使用するものに公開されており、これは望ましくありません。

私は何か間違ったことをしていると思います。だから私はいくつかの助けをいただければ幸いです。

4

1 に答える 1

1

あなたの言っていることが正しく理解できれば、あなたが望むのは、変数find()を公開せずにモデルの「静的」メソッドを許可することだと思います。storeJavascript には、実際にはクラスの正式なプライベート スコープはありませんが、クロージャを使用して必要なものを取得できます。ここにフィドルがあります:

http://jsfiddle.net/52FPy/

編集:クロージャーを使用して情報を公開/非表示にするさまざまな方法を示す更新されたフィドル: http://jsfiddle.net/52FPy/2/

簡単に言うと:

var Model = function(){
    var store = 'this is a store';
    var Model = function(){

    }

    Model.find = function(){
        return store;
    }

    return Model;
}()

これにより、必要な方法で変数が「非表示」にstoreなります。

于 2013-05-08T18:24:09.373 に答える