如何调用变量私有函数?

时间:2014-01-28 12:58:23

标签: javascript tidesdk

我有一个UserInterface类,它有一个公共方法,需要能够根据参数将其工作委托给私有函数。需要动态调用私有包装器的名称:

function UserInterface() {
  // ...

  this.getViewHtml = function(view) {  
    // Given this snippet, view would be passed in as 
    // either "First" or "Second".

    // Wrong syntax, I know, but illustrative of what
    // I'm trying to do, I think
    return 'get' + view + 'ViewHtml'();  
  };

  function getFirstViewHtml() {
    return someHtml;
  };

  function getSecondViewHtml() {
    return someHtml;
  };


  // ...
}

正如您所料,如果我没有变量要求,我可以调用私有函数。

如何让我的公共函数使用基于变量的函数名访问适当的私有方法?这不在任何window对象之内,因此window['get' + view + 'ViewHtml']不起作用。

任何见解都将受到赞赏。

1 个答案:

答案 0 :(得分:0)

您需要将私有函数定义为私有对象的方法:

function UserInterface() {    
  this.getViewHtml = function(view) {
    return methods['get' + view + 'ViewHtml']();  
  };

  var methods = {
    getFirstViewHtml : function() { return someHtml; },
    getSecondViewHtml : function() { return someHtml; },
  }
}

或者你可以使用开关:

this.getViewHtml = function(view) {
  switch(view) {
    case 'first': return getFirstViewHtml();
    case 'second': return getSecondViewHtml();
    default : throw new Error('Something is terribly wrong');
  }  
};