удаление с обработчика анонимную функцию
Приветствую!
Вот такое дело: нужно поймать нажатие мыши: делаю вот так: this.deviceCase.addEventListener('mousedown', вот тут обработчик беда в том, что хотелось бы в обработчике получить сразу this поэтому вариант обертки - что то типа callingClassMethod( method, parametr ){ let __this = this; return function(){ let argumentArray = Array.prototype.slice.call( arguments,0 ); if ( !(parametr === undefined )) argumentArray.push(parametr); __this[method].apply( __this,argumentArray ); } } все замечательно. залетаем в событие, this стоит на месте. Но! в событии нужно удалить обработчик. И тут начинается пипец. Потому как функция безымянная. можно конечно поставить в качестве обработчика функцию класса, но тогда на входе нужно колдовать с this, брать его хоть через data... подскажите оптимальное решение! Что то в голову ничего не приходит. Ни какой хитрости...... Понимаю что безымянную нужно убирать, но как оптимально потом взять this??? Через data ну совсем отпад |
а jquery справляется:
$(this.deviceCase).on('mousedown', this.mouseClickMoveDevice.bind(this)); и this на месте и именованный обработчик (можно удалять). но как он это делает??? Кто-нибудь знает? |
все! спасибки и сори за тему. разобрался... )
|
fxobject,
мысли вслух ... <div id="slider"> test </div> <script> class RootElement { constructor(selector) { this.deviceCase = document.querySelector(selector); this.mousedown = this.fun.bind(this); this.deviceCase.addEventListener('mousedown', this.mousedown) } fun(event) { alert([this.deviceCase.id, event.type]); this.deviceCase.removeEventListener('mousedown', this.mousedown) } } new RootElement('#slider') </script> |
1. через присвоение переменной класса
правда делал так this.mousedown = function(){}.... получалась также безымянная. c bind конечно работает. работает проста даже так this.deviceCase.addEventListener('mousedown',this. mouseClickMoveDevice.bind( this ),false); 2. а вот вопрос а где же хранится сам объект new RootElement('#slider')? по идее вышли из контекста где делается new и объект ушел в мусорную корзину. какова практика JS? или к глобальным переменным его типа window.MyClass = new... или в data как то после других языков не очень понятно тогда ссылки на объект торчат железно |
Часовой пояс GMT +3, время: 07:09. |