1. Modelo de evento tradicional
Existem limitações nos modelos de eventos tradicionais.
O modelo em linha é usado na forma de atributos de tag HTML e é misturado com HTML. Esse método, sem dúvida, causa problemas com modificação e extensão e raramente é usado.
O modelo de script grava funções de processamento de eventos em um arquivo JS, obtém elementos da página para vincular as funções de evento correspondentes para acionar a execução. Mas também existem deficiências:
1. Um evento liga várias funções de escuta do evento, o último substitui o primeiro.
2. A ligação repetida precisa ser restrita
3. Padronize Objetos de Eventos
2. Cindagem de eventos modernos
Os eventos no nível do DOM2 definem dois métodos para adicionar e excluir eventos: addEventListener () e removerventListener (). Eles recebem três parâmetros: nome do evento, função, valor booleano borbulhante ou capturado (true significa captura, falso significa borbulhar).
Da mesma forma, o IE fornece dois métodos semelhantes anexos () e destacar (), mas os dois métodos do IE têm outros problemas: é impossível passar esse objeto (este no IE aponta para a janela) Você pode usar o método de chamada para personificar um objeto:
função addEvent (obj, tipo, fn) {if (typeof obj.addeventListener! = 'indefinido') {obj.addeventListener (tipo, fn, false); } else if (obj.attachevent! = 'indefinido') {obj.attachevent ('on' + type, function () {fn.call (obj, window.event);}); }};No entanto, como as funções anônimas são executadas ao adicionar, elas não podem ser excluídas após a adição; Além disso, os métodos do IE fornecidos pelo IE também terão problemas, como execução malsucedida de eventos de ligação em sequência e vazamentos de memória.
Para resolver essa série de problemas, é necessário encapsular ainda mais o método e usar o padrão de nível DOM2 para outros navegadores. Para o IE, adicionar e excluir com base no modo tradicional é adotado. A ideia é:
1. Adicionar é usar a tabela de hash do JS para armazenar eventos de objetos, atribuir um valor de identificação a cada evento de objeto e primeiro determinar se existe a mesma função de processamento na ordem de adição. Se não existir, adicione a função de ligação ao evento à tabela de hash, por sua vez. Isso resolve o problema de incapacidade de executar em sequência e adições repetidas.
2. Ao excluir, é usado para julgar a correspondência da função de travessia. Se existir, é excluído.
Resumir:
Eu não tinha uma compreensão muito mais profunda da ligação de eventos JS antes e até fiquei no modelo de ligação tradicional de eventos, e ainda tinha um entendimento muito superficial da implementação do programa. Desta vez, quando aprendi a biblioteca de encapsulamento, aprendi muitos aplicativos orientados a objetos no JS. Embora as bibliotecas JS como o JQuery tenham alcançado um bom efeito de encapsulamento dos mecanismos de ligação de dados, só sei o motivo, mas não sei por que e sinto que, se tiver a sensação de ser mantido no escuro, analisarei a implementação específica e sentirei um súbito iluminação. Também percebo que, para fazer um bom trabalho em um programa compatível e versátil, preciso considerar muito conteúdo e resolver muitos problemas, e estou gradualmente esclarecendo muitos desses problemas.