есть много похожих вопросов о вызове функций по имени динамически. Однако я не могу найти решение моей конкретной проблемы, где у меня есть локальные функции внутри замыкания, не подвергая функции публичному интерфейсу моего объекта.
Давайте посмотрим на некоторый код (это вымышленный пример)...
(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
};
У меня заканчиваются идеи. Ваша помощь и рекомендации очень ценятся.