Я знаю, что есть много похожих вопросов, но почему-то я ничего не нашел для этой проблемы - можете ли вы указать мне в правильном направлении
Пусть говорят, что у нас есть функция
window.logMeThis = function(msg){
console.log(msg);
}
то мне нужно добавить прослушиватель событий
window.addEventListener('keypress', window.logMeThis.bind(null, "something"));
который сначала выглядит хорошо - но.bind создает новый fn
и теперь я не могу удалить слушателя
window.removeEventListener('keypress', window.logMeThis);
Вы можете сделать это:
window.logMeThis = function(msg){
console.log(msg);
}
var myFunc = window.logMeThis.bind(null, "something");
window.addEventListener('keypress', myFunc);
Чтобы удалить слушателя, просто выполните следующее:
window.removeEventListener('keypress', myFunc);
В принципе, вам нужно иметь ссылку на свою функцию, чтобы удалить ее.
Ты прав:
Этот метод создает функцию, тело которой аналогично функции, на которую она вызывается
просто передайте существующую функцию, и вы сможете ссылаться на нее так:
var i = 0;
window.logMeThis = function(msg){
console.log(msg+''+i);
i++;
}
window.addEventListener('keypress', window.logMeThis, false);
window.removeEventListener('keypress', window.logMeThis, false);
Если вам нужно привязать функцию к определенному контексту, вы можете сделать это:
var boundFunction = window.logMeThis.bind(null, "something");
window.addEventListener('keypress', boundFunction);
Теперь у вас есть ссылка на функцию, чтобы удалить ее.