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