2017-08-03 22 views
0

選択可能なオブジェクト内の関数内からselectItems配列にアクセスしようとしていますが、_Multiselectオブジェクトをパラメータとして関数に戻さずにこれを行う方法があるかどうかはわかりません。他の方法はありますか?親スコープのアクセス変数

function _MultiSelect() { 
} 
_MultiSelect.prototype = { 

    selectedItems: [], 

    selectable: { 

     myFunc: function(){ 
      //how can I access selectedItems from here 
     } 
    } 
} 
+0

を参照することでこの状況を保存することができselectedItemsのは、プロトタイプの一部でなければなりませんか? – marvel308

+0

@ marvel308私はどこでもマルチセレクトオブジェクトの新しいインスタンスを作成する必要はないと思っています。シングルトンになるため、常に1つのインスタンスしか存在しません。 – sjs

答えて

2

1つのオプションはselectablemyFuncおよび任意の他を含むオブジェクトを返す関数を作ることです。これにより、クロージャー内の_MultiSelectコンテキストをキャプチャして、公開しているメソッドで使用することができます。

_MultiSelect.prototype = { 

    selectedItems: [], 

    selectable: function() { 
     var context = this; 
     return { 
      myFunc: function(){ 
      console.log(context.selectedItems); 
      //how can I access selectedItems from here 
      } 
     } 
    } 
} 

ユースケース:

(new _MultiSelect).selectable().myFunc(); 
+0

okありがとうございました。これは関数を使用して親オブジェクトのコンテキストを取得する唯一の方法ですか?機能だけがこの能力を持っていますか? – sjs

+0

これは唯一の方法ではありませんが、 'selectedItems'を静的属性にしたくないのが最も簡単な方法です。オブジェクトは独自のコンテキスト( 'this')を持っているので、それらをネストしたときは常に新しいコンテキストが作成されます。 –

1

次のコード

_MultiSelect.prototype = { 

    selectedItems: [], 

    selectable: function() { 
     // store the context of this in that 
     var that = this; 
     return { 
      myFunc: function(){ 
      // is accessible 
      console.log(that.selectedItems); 
      } 
     } 
    } 
} 
関連する問題