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 + -
显示快捷键?