Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   Переменая переменной или имя функции из строки (https://javascript.ru/forum/events/45155-peremenaya-peremennojj-ili-imya-funkcii-iz-stroki.html)

kostyanet 17.02.2014 11:25

Переменая переменной или имя функции из строки
 
Изначально было так, с подозрением что сразу пошлют:

top_menu[i].addEventListener(sub_menu.dataset.event, 'menu_'+sub_menu.dataset.event, false);


ну и послали. Через полчаса ковыряния документации и катехизисов продолжали посылать настойчиво.

Строка вызывается из функции и скоп должен остаться локальным. На пхп как вы знаете такие вещи щелкают на раз:

$func = 'строка';
$func() // интерпретатор нашел и запустил функцию строка(){}

Я понимаю можно сделать несколько if else или даже switch, но не хотелось академически. Хотелось попсово.

Кто знает способ как вызвать локальную функцию (а именно кложу) по имени в строке - расскажите пожалуйста.

kostyanet 17.02.2014 11:32

Я понимаю что можно вылезти в окно и из него обозреть помещение. Однако в ответ на

console.log(this['Menu']);

я вижу свою функцию, а если добавляю

console.log(this['Menu']['menu_click']);

то х нанэ, то есть undefined. Функция, меж тем конечно есть, в кложе:

var menu_click=function(){...

BETEPAH 17.02.2014 11:38

а return какой-то имеется?
типа return menu_click, например.
Хорошо бы чуть больше кода увидеть.

рони 17.02.2014 11:47

kostyanet,
Цитата:

Сообщение от kostyanet
Я понимаю что можно вылезти в окно и из него обозреть помещение

то есть так window['menu_'+sub_menu.dataset.event] для вас не катит?

kostyanet 17.02.2014 11:57

Я же написаол что снаружи не катит. Я не могу плодить кучу глобальных функций, требуется инкапсулирование как минимум.

kostyanet 17.02.2014 12:02

Цитата:

Сообщение от BETEPAH
типа return menu_click, например.

Какой ретурн?

function Menu(){

var menu_click=function(){};

// тут поиск элементов и связывание функций с событиями
// та самая строчка вверху то есть

}


Где должен быть ретурн?

Мне просто интересно, пишут что функция - объект, а получается к к ее пропертям доступа нет из окна.

Рисовать объект не буду. Намучился с этим гамном на js - больше не хочу. В стопицот раз проще профтыкать тогда if else

BETEPAH 17.02.2014 12:53

function Menu(){

var menu_click=function(){};

// тут поиск элементов и связывание функций с событиями
// та самая строчка вверху то есть
return menu_click;
}

danik.js 17.02.2014 13:29

Цитата:

Сообщение от kostyanet
в кложе

Не получится. Переделай на объкт, скажем:
var eventHandlers = {menu_click: function(){}, blablaClick: function(){}};
И далее eventHandlers['menu_click']()

Цитата:

Сообщение от kostyanet
пишут что функция - объект, а получается к к ее пропертям...

Зачем тебе свойства функции? Они неинтересные.

Цитата:

Сообщение от kostyanet
нет из окна

Нужблядь... На то это и локальная переменная. Нужен доступ из глобала - делай ее глобальной, либо делай свойством доступного объекта.

kostyanet 17.02.2014 13:45

Ну что блджад, выпили кровь, ECMAть их, пейсателей js. :)

top_menu[i].addEventListener(sub_menu.dataset.event, show[sub_menu.dataset.event], false);


Ну и как обычно зл....чий геморр с this'ами. Биндится элемент и ивент. Пока что сделал харкор на вызов собственных методов объекта по имени его отчеству.

Я подумал гребись оно конем и забиндил родителя одним событием на маусеовер. Оказалось хоть клик и начинается с овер, но х-то его получишь из Event'а.

Там система такая. Это обычное меню пункты которого можно одним ключом в дата-сете сделать либо кликабельные. либо ховерные. Потому что меню одно на все барахло, а там часть сущностей имеет заголовок, а часть не имеет. То есть либо пункт топ-меню ведет на ресурс, либо тупо открывает другие пункты.

kostyanet 17.02.2014 13:46

которые кликабельные будут с трехуйгольником вниз.


Часовой пояс GMT +3, время: 17:06.