2017-08-03 100 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); 
      } 
     } 
    } 
}