博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
JS事件派发器EventEmitter
阅读量:5880 次
发布时间:2019-06-19

本文共 1607 字,大约阅读时间需要 5 分钟。

原文地址:

需求

随着Browser客户端JS越来越复杂,MVC(Client端)设计模式成为一个很好的开发选择, 而MVC开发模式中,最基础的功能就是把Model和View关联起来, 当Model发生变化的时候,View呈现做出相应的调整。

实现此功能最合适的方式莫过于事件Event了, 对于Event大家应该都很熟悉,比如dom中的button,可以通过addEventListener/attachEvent添加click事件处理。

而一般的object对象是没有事件派发功能的,基于此需求,实现了一个EventEmitter。

/**  * Created by taozh on 2017/6/22.  * taozh1982@gmail.com  */ var EventEmitter = function () {     this.__z_e_listeners = {}; }; EventEmitter.prototype.on = function (evt, handler, context) {     var handlers = this.__z_e_listeners[evt];     if (handlers === undefined) {         handlers = [];         this.__z_e_listeners[evt] = handlers;     }     var item = {         handler: handler,         context: context     };     handlers.push(item);     return item; }; EventEmitter.prototype.off = function (evt, handler, context) {     var handlers = this.__z_e_listeners[evt];     if (handlers !== undefined) {         var size = handlers.length;         for (var i = 0; i < size; i++) {             var item = handlers[i];             if (item.handler === handler && item.context === context) {                 handlers.splice(i, 1);                 return;             }         }     } }; EventEmitter.prototype.emit = function (type, event) {     var hanlders = this.__z_e_listeners[type];     if (hanlders !== undefined) {         var size = hanlders.length;         for (var i = 0; i < size; i++) {             var ef = hanlders[i];             var handler = ef.handler;             var context = ef.context;             handler.apply(context, [event]);         }     } };

转载于:https://www.cnblogs.com/youzhuxiaoyao/p/7717303.html

你可能感兴趣的文章
来自维基百科程序员Brandon Harris
查看>>
NULL不是数值
查看>>
CentOS 5 全功能WWW服务器搭建全教程
查看>>
scala111
查看>>
模块化服务规范——OSGI
查看>>
劣质代码评析——猜数字问题(上)
查看>>
纸上谈兵: 栈 (stack)
查看>>
Windows phone8 基础篇(三) 常用控件开发
查看>>
Oracle学习笔记之五,Oracle 11g的PL/SQL入门
查看>>
大叔手记(3):Windows Silverlight/Phone7/Mango开发学习系列教程
查看>>
考拉消息中心消息盒子处理重构(策略模式)
查看>>
so easy 前端实现多语言
查看>>
【追光者系列】HikariCP源码分析之ConcurrentBag&J.U.C SynchronousQueue、CopyOnWriteArrayList...
查看>>
在navicat中如何新建连接数据库
查看>>
canvas系列教程05-柱状图项目3
查看>>
css绘制几何图形
查看>>
HTML标签
查看>>
理解JS中的Event Loop机制
查看>>
转载:字符编码笔记:ASCII,Unicode和UTF 8
查看>>
修复看不懂的 Console Log
查看>>