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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
该资源内项目源码是个人的课程设计、毕业设计,代码都测试ok,都是运行成功后才上传资源,答辩评审平均分达到96分,放心下载使用! ## 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.md文件(如有),仅供学习参考, 切勿用于商业用途。 该资源内项目源码是个人的课程设计,代码都测试ok,都是运行成功后才上传资源,答辩评审平均分达到96分,放心下载使用! ## 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.md文件(如有),仅供学习参考, 切勿用于商业用途。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值