使用JavaScript怎么实现一个观察者模式

  介绍

本篇文章给大家分享的是有关使用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怎么实现一个观察者模式,小编相信有部分知识点可能是我们日常工作会见到或用到的。希望你能通过这篇文章学到更多知识。更多详情敬请关注行业资讯频道。

使用JavaScript怎么实现一个观察者模式