15.03 - building an observer api.js
来自「JS设计模式源代码」· JavaScript 代码 · 共 51 行
JS
51 行
function Publisher() { this.subscribers = [];}Publisher.prototype.deliver = function(data) { this.subscribers.forEach( function(fn) { fn(data); } ); return this;};Function.prototype.subscribe = function(publisher) { var that = this; var alreadyExists = publisher.subscribers.some( function(el) { if ( el === that ) { return; } } ); if ( !alreadyExists ) { publisher.subscribers.push(this); } return this;};Function.prototype.unsubscribe = function(publisher) { var that = this; publisher.subscribers = publisher.subscribers.filter( function(el) { if ( el !== that ) { return el; } } ); return this;};var publisherObject = new Publisher;var observerObject = function(data) { // process data console.log(data); // unsubscribe from this publisher arguments.callee.unsubscribe(publisherObject);};observerObject.subscribe(publisherObject);
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?