Переменая переменной или имя функции из строки
Изначально было так, с подозрением что сразу пошлют:
top_menu[i].addEventListener(sub_menu.dataset.event, 'menu_'+sub_menu.dataset.event, false); ну и послали. Через полчаса ковыряния документации и катехизисов продолжали посылать настойчиво. Строка вызывается из функции и скоп должен остаться локальным. На пхп как вы знаете такие вещи щелкают на раз: $func = 'строка'; $func() // интерпретатор нашел и запустил функцию строка(){} Я понимаю можно сделать несколько if else или даже switch, но не хотелось академически. Хотелось попсово. Кто знает способ как вызвать локальную функцию (а именно кложу) по имени в строке - расскажите пожалуйста. |
Я понимаю что можно вылезти в окно и из него обозреть помещение. Однако в ответ на
console.log(this['Menu']); я вижу свою функцию, а если добавляю console.log(this['Menu']['menu_click']); то х нанэ, то есть undefined. Функция, меж тем конечно есть, в кложе: var menu_click=function(){... |
а return какой-то имеется?
типа return menu_click, например. Хорошо бы чуть больше кода увидеть. |
kostyanet,
Цитата:
|
Я же написаол что снаружи не катит. Я не могу плодить кучу глобальных функций, требуется инкапсулирование как минимум.
|
Цитата:
function Menu(){ var menu_click=function(){}; // тут поиск элементов и связывание функций с событиями // та самая строчка вверху то есть } Где должен быть ретурн? Мне просто интересно, пишут что функция - объект, а получается к к ее пропертям доступа нет из окна. Рисовать объект не буду. Намучился с этим гамном на js - больше не хочу. В стопицот раз проще профтыкать тогда if else |
function Menu(){ var menu_click=function(){}; // тут поиск элементов и связывание функций с событиями // та самая строчка вверху то есть return menu_click; } |
Цитата:
var eventHandlers = {menu_click: function(){}, blablaClick: function(){}}; И далее eventHandlers['menu_click']() Цитата:
Цитата:
|
Ну что блджад, выпили кровь, ECMAть их, пейсателей js. :)
top_menu[i].addEventListener(sub_menu.dataset.event, show[sub_menu.dataset.event], false); Ну и как обычно зл....чий геморр с this'ами. Биндится элемент и ивент. Пока что сделал харкор на вызов собственных методов объекта по имени его отчеству. Я подумал гребись оно конем и забиндил родителя одним событием на маусеовер. Оказалось хоть клик и начинается с овер, но х-то его получишь из Event'а. Там система такая. Это обычное меню пункты которого можно одним ключом в дата-сете сделать либо кликабельные. либо ховерные. Потому что меню одно на все барахло, а там часть сущностей имеет заголовок, а часть не имеет. То есть либо пункт топ-меню ведет на ресурс, либо тупо открывает другие пункты. |
которые кликабельные будут с трехуйгольником вниз.
|
Ну и вообще хорошая возможность иметь возможность оперативно выбирать поведение менюхи. Там кода на ладонь.
|
Я понимаю что в php нет развитой аппаратной части и поэтому с :: особых проблем не возникает, но одобрить реализацию поддержки аппарата в js не могу. Абсолютно неуправляемая хрень эти вектора прерываний. На логику уходит в десять раз меньше времени чем на сраный интерфейс.
|
Ты про какой аппарат? Какие нафиг прерывания? JS высокоуровневый, нет в нем прерываний. Не путай с событиями.
|
Монопенисуально. Прерывание это запись в стек текущей команды и переход на команду по вектору, затем назад в стек за прежним значением и дальше пока снова не нахлобучат. Что записывается в стек - значения не имеет, хоть пол-винта. Я набираю этот текст и оно прерывается. И когда стираю текст прерывается. Кстати, куда девается стертая буква?
Щелчок мыши - который булькает в мозгах интепретатора восходит оттуда же в сущности. На php события главным образом это таймеры. |
Ну я согласен что события мыши или клавы начинаются с прерывания, но зачем же путать терминологию-то? Чтобы понтонуться?
|
Где события там и прерывания.
В общем получился как обычно ублюдок. И это обычное дело. Переписав на объект var TopMenu = {}; обнаружил что TopMenu.init() вяжет события через addEventListenere(event_type, function(e){return this.handle[event_type]}, false); что абсолютно эквипенисуально function = TopMenu(){ var handle={}; // загрузка handle } чем собственно народ на яс и занимается в массовом порядке. Не было похоже у создателей екмы таких планов, которые народ начал строить на dhtml |
С максимусом у одного барыги закупаются
|
Цитата:
|
"Сделал гадость - сердцу радость"
|
Часовой пояс GMT +3, время: 19:40. |