我有一个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']
不起作用。
任何见解都将受到赞赏。
答案 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');
}
};