2017-08-03 209 views
0

我試圖從可選對象中的函數內部訪問selectItems數組,但不確定是否有一種方法可以在不將_Multiselect對象作爲參數傳遞迴函數的情況下執行此操作。有其他方法嗎?在父範圍內的訪問變量

function _MultiSelect() { 
} 
_MultiSelect.prototype = { 

    selectedItems: [], 

    selectable: { 

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

確實selectedItems必須是原型的一部分嗎? – marvel308

+0

@ marvel308我不確定,我不認爲我需要在任何地方創建多重選擇對象的新實例 - 它將成爲一個單例,因此總是存在一個實例 – sjs

回答

2

一種選擇是讓selectable返回包含myFunc和任何其他對象的功能。這使您可以捕獲閉包中的上下文,並將其用於您正在公開的方法中。

_MultiSelect.prototype = { 

    selectedItems: [], 

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

USECASE:

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

好的,謝謝,我正在考慮這樣做 - 所以這是捕獲父對象的上下文的唯一方法,通過使用函數?只有功能有這個能力嗎? – 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); 
      } 
     } 
    } 
}