Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 11.04.2021, 22:41
Аватар для fxobject
Кандидат Javascript-наук
Отправить личное сообщение для fxobject Посмотреть профиль Найти все сообщения от fxobject
 
Регистрация: 01.03.2021
Сообщений: 138

удаление с обработчика анонимную функцию
Приветствую!
Вот такое дело:
нужно поймать нажатие мыши:
делаю вот так:
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 ну совсем отпад
Ответить с цитированием
  #2 (permalink)  
Старый 11.04.2021, 23:13
Аватар для fxobject
Кандидат Javascript-наук
Отправить личное сообщение для fxobject Посмотреть профиль Найти все сообщения от fxobject
 
Регистрация: 01.03.2021
Сообщений: 138

а jquery справляется:
$(this.deviceCase).on('mousedown', this.mouseClickMoveDevice.bind(this));
и this на месте и именованный обработчик (можно удалять).
но как он это делает???
Кто-нибудь знает?
Ответить с цитированием
  #3 (permalink)  
Старый 11.04.2021, 23:16
Аватар для fxobject
Кандидат Javascript-наук
Отправить личное сообщение для fxobject Посмотреть профиль Найти все сообщения от fxobject
 
Регистрация: 01.03.2021
Сообщений: 138

все! спасибки и сори за тему. разобрался... )
Ответить с цитированием
  #4 (permalink)  
Старый 11.04.2021, 23:19
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,112

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>
Ответить с цитированием
  #5 (permalink)  
Старый 11.04.2021, 23:41
Аватар для fxobject
Кандидат Javascript-наук
Отправить личное сообщение для fxobject Посмотреть профиль Найти все сообщения от fxobject
 
Регистрация: 01.03.2021
Сообщений: 138

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
как то после других языков не очень понятно
тогда ссылки на объект торчат железно
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
как вызвать анонимную функцию которая находится в подключенном файле(.js) arsen97 Общие вопросы Javascript 3 03.08.2014 00:23
Удаление обработчика события FanAizu Общие вопросы Javascript 3 23.08.2013 18:46
Можно ли обнаружить анонимную функцию? zOdmin Общие вопросы Javascript 4 22.03.2013 20:38
передать анонимную функцию, вызывающую другую функцию с нужными параметрами Ваяс Общие вопросы Javascript 5 21.02.2013 20:12
вопрос про анонимную функцию noname1990 Общие вопросы Javascript 6 19.06.2012 11:37