【发布时间】:2012-03-16 22:05:05
【问题描述】:
关于通过名称动态调用函数有很多类似的问题。但是,我无法找到解决我的特定问题的解决方案,即我在闭包中拥有本地函数而不将函数暴露给我的对象的公共接口。
让我们看一些代码(这是一个虚构的例子)...
(function(window,$) {
MyObject = (function($) {
var obj = {};
obj.publicMethod = function(number,otherarg) {
this['privateMethod'+number].apply(this,[otherarg]);
};
var privateMethod1 = function(arg) {
//do something with arg
};
var privateMethod2 = function(arg) {
//do something else with arg
};
return obj;
})($);
window.MyObject = MyObject;
})(window,jQuery);
这不起作用,因为“this”是 MyObject 并且本地函数未公开。 此外,我希望能够在尝试调用它之前检查该函数是否存在。 例如。
var func_name = 'privateMethod'+number;
if($.isFunction(this[func_name])) {
this[func_name].apply(this,[otherarg]);
}
我不确定如何继续,除了将我的私有函数暴露给公共接口之外,一切正常。
obj.privateMethod1 = function(arg) {
//do something with arg
};
obj.privateMethod2 = function(arg) {
//do something else with arg
};
我的想法已经不多了。非常感谢您的帮助和建议。
【问题讨论】:
标签: javascript closures scope