介绍
本篇文章给大家分享的是有关使用JavaScript怎么实现一个观察者模式,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。
<强>一、定义观察者类Pubsub 强>
/*, Pubsub */,function Pubsub () {//存才能放事件和对应的处理方法=,this.handles , {}; 以前,}><强>二,实现事件订阅在强>
//传入事件类型类型和事件处理处理 ,:function (类型,处理),{ 如果才能(! this.handles[型]){ ,,this.handles[型],=,[]; ,,} this.handles才能[型].push(处理); 以前,}><强>三,实现事件发布发出强>
排放:,function (), {//才能通过传入参数获取事件类型 ,var type =, Array.prototype.shift.call(参数); 如果才能(! this.handles[型]){ ,,return 假; ,,} ,for (var 小姐:=,0;,小姐:& lt;, this.handles[型]. length;,我+ +),{ ,,var handle =, this.handles[型][我]; ,,//执行事件 handle.apply才能(,,参数); ,,} 以前,}>需要说明的是Array.prototype.shift.call(参数)这句代码,参数对象是函数的内置对象,可以获取到调用该方法时传入的实参数组。
转变方法取出数组中的第一个参数,就是类型类型。
<强>四,实现事件取消订阅了强>
:, function (类型,,处理),{ 时间=handles 才能;this.handles[型]; 如果才能(处理){ ,,如果(处理){ ,,,handles.length =, 0;//清空数组 }{其他才能 ,,,for (var 小姐:=,0;,小姐:& lt;, handles.length;,我+ +),{ ,,,,var _handle =,处理[我]; ,,,,如果(===_handle 处理){ ,,,,,handles.splice(我,1); ,,,,} ,,,} ,,} ,,} 以前,}><强>完整代码:强>
/*, Pubsub */,function Pubsub () {//存才能放事件和对应的处理方法=,this.handles , {}; ,} ,Pubsub.prototype={//传才能入事件类型类型和事件处理处理 ,,:function (类型,,处理),{ ,,如果(! this.handles[型]){ ,,,this.handles[型],=,[]; ,,} (类型),才能this.handles .push(处理); ,,}, ,,发出:function (), { ,,//通过传入参数获取事件类型 var 才能;type =, Array.prototype.shift.call(参数); ,,如果(! this.handles[型]){ ,,,return 假; ,,} ,for (var 小姐:=,0;,小姐:& lt;, this.handles[型]. length;,我+ +),{ ,,,var handle =, this.handles[型][我]; ,,,//执行事件 ,,handle.apply(,,参数); ,,} ,,}, ,,:function (类型,,处理),{ ,,handles =, this.handles(类型); ,,如果(处理){ ,,,如果(处理){ ,,,,handles.length =, 0;//清空数组 其他,,}{ ,for (var 小姐:=,0;,小姐:& lt;, handles.length;,我+ +),{ ,,,,,var _handle =,处理[我]; ,,,,,如果(===_handle 处理){ ,,,,,,handles.splice(我,1); ,,,,,} ,,,,} ,,,} ,,} ,,} 以前,}><强>五、测试强>
var p1 =, new Pubsub (); ,p1.on (& # 39; mm # 39;,, function (名字),{ ,console.log (& # 39; mm:, & # 39; +,名称); ,}); ,p1.emit (& # 39; mm # 39;, & # 39;哈哈哈哈& # 39;); console.log (& # 39;===============& # 39;); ,var p2 =, new Pubsub (); ,var fn =, function (名字),{ ,console.log(& # 39;平方毫米:& # 39;+,名称); ,}; ,var fn2 =, function (名字),{ ,console.log (& # 39; mm222:, & # 39; +,名称); ,}; ,p2.on(& # 39;平方毫米# 39;,,fn); ,p2.on(& # 39;平方毫米# 39;,,fn2); ,p2.emit(& # 39;平方毫米# 39;,& # 39;哈2哈哈哈2 & # 39;); ,console.log (& # 39; - - - - - - - - - - - - - - - - - - # 39;); p2.off(& # 39;平方毫米# 39;,,fn); ,p2.emit(& # 39;平方毫米# 39;,& # 39;哈2哈哈哈2 & # 39;); ,console.log (& # 39; - - - - - - - - - - - - - - - - - - # 39;); p2.off(& # 39;平方毫米# 39;); ,p2.emit(& # 39;平方毫米# 39;,& # 39;哈2哈哈哈2 & # 39;); ,console.log (& # 39; - - - - - - - - - - - - - - - - - - # 39;);
以上就是使用JavaScript怎么实现一个观察者模式,小编相信有部分知识点可能是我们日常工作会见到或用到的。希望你能通过这篇文章学到更多知识。更多详情敬请关注行业资讯频道。
使用JavaScript怎么实现一个观察者模式