裝飾者模式 發布訂閱模式

2021-10-23 18:30:08 字數 1559 閱讀 4877

// 發布訂閱模式、 裝飾者模式

//在不改變原來的物件的基礎上,新增新的屬性或者方法

// es7 中的裝飾者,借助了 object.defineproperty object.defineproperty(obj, prop, descriptor)

// obj:要在其上定義屬性的物件。

// prop:要定義或修改的屬性的名稱。

// descriptor:將被定義或修改的屬性描述符。

// 返回值:被傳遞給函式的物件。

// 裝飾器只能用於類和類的方法,不能用於函式,因為存在函式提公升。

// 另一方面,如果一定要裝飾函式,可以採用高階函式的形式直接執行。

// demo1 模擬傳統語言的裝飾者

//原始的飛機類

var plan = function () , // 事件中心

on(type,fn)else{

this.evenlistobj[type] = ;

this.evenlistobj[type].push(fn);

return this;

emit(type,...args){ // 發布

let eventlistarr = this.evenlistobj[type] || ;

for(let i = 0 ;i < eventlistarr.length; i++){

return this;

once(type,fn){ // 僅僅執行一次

const tempfn = function(...args){

this.off(type,tempfn)

tempfn.fn = fn;

this.on(type,tempfn);

return this;

off(type,fn){ // 取消

let eventlistarr = this.evenlistobj[type] ||;

for(let i = eventlistarr.length-1;i>=0;i-- ){

if( eventlistarr[i] == fn ||ventlistarr[i].fn == fn ){

eventlistarr.splice(i,1);

break;

return this;

function testfun(...args){

console.log("on--",args)

function oncefun(...args){

console.log("oncefun--",args)

// event.on("click",testfun)

// event.emit("click","123","3456")

// event.off("click",testfun);

// event.emit("click","22","23")

// event.once("click",oncefun)

// event.emit("click","11","1--1")

// event.emit("click","22","23")

js發布訂閱者模式

發布 訂閱模式可以用乙個全域性的 event 物件來實現,訂閱者不需要了解訊息來自哪個發布者,發布者也不知道訊息會推送給哪些訂閱者,event 作為乙個類似 中介者 的角色,把訂閱者和發布者聯絡起來。統一訊息管理,將訊息傳送給所有訂閱這個訊息型別的模組 採用 訂閱 發布 觀察者 這種設計模組式開發 ...

js 發布 訂閱者模式

發布 訂閱模式 bw 2020 07 29 const event on function name,method,target else this.regsiter name push emit function name off function name,target 移除事件 this.re...

ActiveMQ 發布訂閱者模式

訊息的傳送方編寫 生產者 建立連線工廠物件 connectionfactory connectionfactory newactivemqconnectionfactory tcp localhost 61616 從工廠獲取連線 connection connection connectionfac...