JS的自定义事件(观察者模式)

 1      var Event = {
 2             on: function (eventName, callback) {
 3                 console.log("eventName:"+eventName)
 4                 if (!this.handles) {
 5                     Object.defineProperty(this, "handles", {
 6                         value: {},
 7                         enumerable: false//不可枚举
 8                     })
 9                     //this.handles = {};//可以枚举
10                 }
11                 if (!this.handles[eventName]) {
12                     this.handles[eventName] = [];
13                 }
14                 this.handles[eventName].push(callback);
15             },
16             emit: function () {
17                 var hlist = this.handles[arguments[0]] || [];
18                 for (var i = 0; i < hlist.length; i++) {
19                     this.handles[arguments[0]][i](arguments[1]);
20                 }
21             }
22         }
23         Event.on("dome", function (params) {
24             console.log(params);
25         });
26         Event.on("dome", function (params) {
27             console.log("dome log");
28         });
29         Event.emit("dome", "holle world");
30 
31         var person1 = {};
32         var person2 = {};
33         //Object.assign是浅复制,会导致person1,person2共用同一个handles
34         Object.assign(person1, Event);
35         Object.assign(person2, Event);
36         person1.on('call1', function () {
37             console.log('person1');
38         });
39         person2.on('call2', function () {
40             console.log('person2');
41         });
42         person1.emit('call1'); // 输出 'person1'
43         person1.emit('call2'); // 没有输出
44         person2.emit('call1'); // 没有输出
45         person2.emit('call2'); // 输出 'person2'

 

转载于:https://www.cnblogs.com/cn2758/p/8079043.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/251257.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

glog日志库使用笔记

日志能方便地诊断程序原因、统计程序运行数据&#xff0c;是大型软件系统必不可少的组件之一。glog 是google的开源日志系统&#xff0c;相比较log4系列的日志系统&#xff0c;它更加轻巧灵活。 在Github上下载glog&#xff0c;解压后用CMake生成VS2017工程&#xff08;默认生成…

javascript --- 异步工作流的动态排队技术

很多情况下,使用async.series和async.paralle存在一个明显的问题,即: 1.其任务队列是静态的,在其调用前,一定要明确任务队列的数量,一旦明确了任务队列的数量,就不能改变. 2.倘如要同时并发读取上千个文件,使用async.paralle明显不可能(各线程抢资源,根本不够用),使用async.ser…

java中的内部类总结

内部类不是很好理解&#xff0c;但说白了其实也就是一个类中还包含着另外一个类 如同一个人是由大脑、肢体、器官等身体结果组成&#xff0c;而内部类相当于其中的某个器官之一&#xff0c;例如心脏&#xff1a;它也有自己的属性和行为&#xff08;血液、跳动&#xff09; 显然…

elementPlus关闭弹窗,页面原先滚动条消失

一开始以为是弹窗内容超过一屏引起&#xff0c;改为一屏内也不能解决。 打开控制台&#xff0c;发现弹窗后自动给body标签加上了类el-popup-parent–hidden&#xff0c;关闭后也没去除&#xff0c;因此手动删除该类。 document.getElementsByTagName(body)[0].className ;

在Windows下如何创建虚拟环境(默认情况下)

很多小伙伴平时在使用Python的时候&#xff0c;有的项目需要使用Python2来进行开发&#xff0c;有的项目则是需要Python3来进行开发。当不清楚怎么分开环境的时候&#xff0c;此时两个环境开始打架&#xff0c;彼此傻傻分不清楚。虚拟环境作为隔离的利器应运而生&#xff0c;其…

javascript --- 隐藏内部实现(最小暴露原则)

看下面的一个例子: function doSomething(a) {b a doSomethingElse( a * 2 );console.log( b * 3 ); }function doSomethingElse(a) {return a - 1; }var b;doSomething( 2 ) ; // 15上述代码中的doSomethingElse实际上应该是doSomething的"私有"部分,根据最小暴露…

selenium python 入门-元素定位

环境搭建 安装教程 http://www.testclass.net/selenium_python/install-selenium/ chrome浏览器 还需要下载chrome driver 把下载的chromedriver .exe放到chrome安装目录下的Application目录下和 python所在的安装目录下&#xff0c;比如我的目录是C:\Program Files (x86)\Goog…

ES5程序设计转ES6 笔记

课程链接 1. 立即执行函数 特点&#xff1a;执行结束&#xff0c;立即销毁&#xff1b;独立作用域执行符号&#xff08;&#xff09;只能跟在表达式后面&#xff0c;不能放在函数声明后分号可以写在前面/后面document为传入实参&#xff0c;doc为形参 ;(function(doc){...co…

DPDK helloworld 源码阅读

在 DPDK Programmers Guides 中的 EAL 一篇中有一个图可以很清晰地看到一个DPDK的应用程序的大致执行思路&#xff1a; 初始化检查CPU支持、微架构配置等完成后&#xff0c;执行main()函数。 第一步是 rte_eal_init()&#xff0c;核心初始化和启动。其中线程使用的是pthread库&…

javascript --- 作用域和闭包

执行环境: // 定义了变量或函数有权访问的其他数据,决定了它们各自的行为 // 每个执行环境都有一个变量对象与之对应,执行环境中所定义的所有变量和函数都保存在变量对象中 // 某个执行环境中的所有代码执行完毕后,该执行环境被销毁,保存在其中的所有变量和函数定义也随之销毁…

异步下载圆形进度条显示进度

圆形进度条参考链接即可&#xff1a;使用css3实现圆形进度条 需求点击下载后遮罩层显示下载进度&#xff1a; 1.圆形进度条参考以上链接&#xff0c;有点小瑕疵&#xff0c;可更改定位距离实现重合。 2.遮罩层&#xff1a; .lbOverlay{display: none;position: fixed;left: 0;…

javascript基本功

隐式类型转换 var a {_default: 0,toString: function () {return a._default} } if (a 1 && a 2 && a 3) {console.log(解) } 访问一个变量的时候进行拦截 var _default 0 Object.defineProperty(window, a, {get() {return _default} }) if (a 1 &am…

深信服笔试,抓兔子

*问题描述&#xff1a;抓兔子n个排成一排的洞&#xff0c;编号为1到n&#xff0c;兔子每天晚上会跳到相邻的一个洞里&#xff0c;小q每天只能白天检查其中的一个洞&#xff0c;小q会告诉你每天检查的洞&#xff0c;分析是否一定能抓到兔子示例&#xff1a;3个洞&#xff0c;第一…

es6 --- 模块

function foo(){var something cool;var another [1, 2, 3];function doSomething() {console.log( something );}function doAnother() {console.log( another.join( " ! " ) );} } // 是一个不明显的闭包,doSomething()和doAnother()保持了foo的内部作用域接下来…

Java之递归遍历目录,修改指定文件的指定内容

EditProperties.java 1 package PropertiesOperation.Edit;2 3 import java.io.File;4 5 /**6 * 替换指定Porpoerties文件中的指定内容7 * 三个参数&#xff1a;8 * filePath&#xff1a;存放properties文件的目录9 * srcStr&#xff1a;需要替换的字符串 10 * desStr&…

学习日志---7

1.复习Linux hadoop hdfs MapReduce基础知识 1&#xff0c;列举linux常用命令 shutdown now reboot mkdir mkdir -p touch filename rm -r filename rm -rf filename vi filename i--->可编辑状态 esc --> : --->wq 保存退出 q! wq! cat grep find ifconfig ping user…

javascript --- 属性描述符

从ES5开始,所有的属性都具备了属性描述符 var myObject {a: 2 };Object.getOwnPropertyDescriptor(myObject, "a"); //{ // value:2, // writable: true, // 可写 // enumerable: true, // 可枚举 // configurble: true // 可配置 //}定义属性…

看了吗网址链接

sklearn实战-乳腺癌细胞数据挖掘&#xff08;博主亲自录制视频&#xff09; https://study.163.com/course/introduction.htm?courseId1005269003&utm_campaigncommission&utm_sourcecp-400000000398149&utm_mediumshare # -*- coding: utf-8 -*- ""&qu…

JMeter 性能测试进阶实战

课程简介 本课程制作的主要目的是为了让大家快速上手 JMeter&#xff0c;期间穿插了大量主流项目中用到的技术&#xff0c;以及结合当今主流微服务技术提供了测试 Dubbo 接口、Java 工程技术具体实施方案&#xff0c;注重实践、注意引导测试思维、拒绝枯燥的知识点罗列、善于用…

javascript --- 混入

显示混入: function mixin(sourceObj, targetObj){for(var key in sourceObj){ // 遍历source中的所有属性if(!(key in targetObj)) { // 找到targetz中没有的属性targetObj[key] sourceObj[key];}}return targetObj; }var Vehicle {engines: 1,iginition: function() {c…