Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > JavaScript: Общие вопросы > Объявить функцию где часть имени переменная


Автор: mstdmstd 8.12.2015, 16:01
Всем привет,
Можно ли в js-файле, при объявлении функций, часть имени задать в качестве переменной? Что-то вроде file.js:
Код

var this_m_nsnPluginPrefix;

function nsnpas_productsAjaxSearchBox(Params, use_in_search_array, autocomplete_save_options_as_array) {  // constructor of backend artist's editor - set all params from server
    selfproductsAjaxSearchBox = this;
    this_m_nsnPluginPrefix = Params.nsnPluginPrefix;
    this_plugin_url = Params.plugin_url;
    ...
}

nsnpas_productsAjaxSearchBox.prototype.openOptions = function () {
    $( "#span_"+this_m_nsnPluginPrefix+"openOptions").css("display","none")
    $( "#span_"+this_m_nsnPluginPrefix+"hideOptions").css("display","inline")
    $( "#div_"+this_m_nsnPluginPrefix+"ajaxSearchOptions").css("display","inline")


Где "nsnpas_" и должна быть заданная переменная, которая и передается через в функцию nsnpas_productsAjaxSearchBox как параметр Params.nsnPluginPrefix ?

Идея в том, что это php/wordpress плагин с подключенным js-файлом с js функциями.
Хочется избежать возможных ошибок js-функций с одним и тем же именем от разных девелоперов и используя префикс "nsnpas_" в именах функций и инпутов ввода данных.
И иметь возможность задать этот "nsnpas_" в одном месте - чтобы можно было поменять...

Автор: ksnk 8.12.2015, 17:30
В JS есть разные способы.
Например - замыкания. Снаружи тела функции, все описанные внутри функции не видны. Если внутри тела функции использовать свежеописанные для устанвки обработчиков событий, таймеров и так далее, то после выполнения - функции останутся, а имен - не будет.
Что-то вроде
Код

(function(){
   function a(){
     console.log('call a function');
   }
   setinterval(a,1000);
})();

function a(){
  console.log('call a(2) function');
}

Финт ушами, когда внутри скобок () описывается функция - выдает анонимную функцию, и когда после этого идет еще одна пара скобок - получается вызов этой самой функции.

Если присмотреться к исходникам плагинов к jQuery - такой прием встречается часто..

Есть и более "традифионный" метод - все функции можно просто присваивать какому-нибудь объекту. 
Код

var a={};
a.a=function(e){
}
...
a.a(e);

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)