當(dāng)前位置:
首頁 >
前端技术
> javascript
>内容正文
javascript
JS的自定义事件(观察者模式)
生活随笔
收集整理的這篇文章主要介紹了
JS的自定义事件(观察者模式)
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
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是淺復(fù)制,會導(dǎo)致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'
?
轉(zhuǎn)載于:https://www.cnblogs.com/cn2758/p/8079043.html
總結(jié)
以上是生活随笔為你收集整理的JS的自定义事件(观察者模式)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 斜率DP总结
- 下一篇: 邮储信用卡商户分期怎么办理?分期流程看这