Omar~ 87 Denunciar post Postado Julho 22, 2022 Boas?! Então, venho aqui a pedir ideias sobre como identificar uma função anônima atribuída quando uma segunda função a declara. Basicamente tenho 2 funções: uma é chamada para adicionar o tipo de ação e qual função executar com o evento acionado. outra obtem o tipo e a função para remover o evento no elemento. on: function () { var $type = arguments[0], $listener = arguments[1]; if (!$_.isDefined(this[0].eventListener)) { this[0].eventListener = []; } this[0].eventListener.push({ type: $type, listener: $listener }); this[0].addEventListener($type, $listener, false); }, off: function () { var $type = arguments[0], $listener = arguments[1], $i = 0, $eventData = null; if ($_.isDefined(this[0].eventListener)) { for (; $i < this[0].eventListener.length; $i++) { $eventData = this[0].eventListener[$i]; if ($type == $eventData.type && $listener == $eventData.listener) { this[0].removeEventListener($eventData.type, $eventData.listener, false); } else if ($type == $eventData.type) { this[0].removeEventListener($eventData.type, $eventData.listener, false); } } } } Perceba que para registrar e mais tarde saber qual função foi atribuída ao evento para remover eu armazenei os valores em um array. E para remover apenas identifico se o argumento bate com os dados em algum índice do array. Até então tudo bem..... function adicionar() { elemento.on('click', minhaFuncao); } function remover() { elemento.off('click', minhaFuncao); } O probema está em funções anônimas quando declaradas dentro de outra função como isso: function adicionar() { elemento.on('click', function () { // o que fazer.... }); } Então até dar para identificar qual função a declarou, porém não dar para remover com removeEventListener pois essa função não é a ouvinte do elemento. Obs.: Até poderia apagar a função ou "desaturbir sobre o alvo", no entanto não é viável pois pode haver que mais tarde ou outras condições dependam da função. Até cheguei a solucionar "como quebra-galho": Ao invés de atribuir a função recebida pelo argumento em "on" eu atribuo uma outra função pré definida, e essa função checa do array, se houver um índice onde o objeto é o mesmo tipo de evento e a função requisitada também existe no array, essa pré definida executa a função original. Porém não é uma função real, e mais tarde se a pessoa quiser disparar a função digamos um click não pode a chamar seus atributos diretamente (porque seus atrinbutos não são dela e sim da pré definda), terá que chamar a função pré definida, pois é ela realmente a ouvinte. Tornando alvo inviável para quem tem baixo ou menos intimidade com o javascript Por fim até onde eu sei no javascript não há como manipular funções anônimas, por isso o que eu estou tentando fazer é inventar uma solução para algo que não existe. Nota: Nesse caso funciona pois não há uma outra função intermediária, mesmo que seja algo sem sentido de de fazer exemplo.on('click', function (e) { // o que fazer.... }); exemplo.off('click', function (e) { // o que fazer.... }); Compartilhar este post Link para o post Compartilhar em outros sites
Jack Oliveira 1 Denunciar post Postado Julho 26, 2022 Ola @Omar~ pesquisando encontrei este link a respeito do que você precisa Talvez possa ajudar Links link2 Compartilhar este post Link para o post Compartilhar em outros sites
Omar~ 87 Denunciar post Postado Julho 26, 2022 Não é um problema com função anônima e sim como manipular alguma por outra função... Enfim, consegui produzir uma solução concreta, daí me esbarrei em que fazer algo a respeito não trás benefício algum. Além do mais funções anônimas devem ser evitadas, por consumirem muito mais processamento. Mas a aplicação que estou desenvolvendo tem suporte para tais funções, mas não terá suporte a uma manipulação direta a elas. Compartilhar este post Link para o post Compartilhar em outros sites