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