Observable = function() { this.observers = []; } Observable.prototype.deliver = function(data) { for (var i in this.observers) { this.observers[i](data); } } Function.prototype.subscribe = function(observable) { observable.observers.push(this); return this; }
myClass = function() { this.value = 0; // this.onChange = new Observable(); // } myClass.prototype.change = function(new_value) { this.value = new_value; this.onChange.deliver(this.value); // — } var c = new myClass(); var write_log = function(value) { console.log(value); } write_log.subscribe(c.onChange);
myClass = function() { this.value = 0; this.onChange = new Observable(); } myClass.prototype.change = function(new_value) { this.value = new_value; this.onChange.deliver(this.value); } Logger = function(logtype) { this.type = (!!logtype) ? logtype : "alert"; } Logger.prototype.write = function(value) { if (this.type == "console") { console.log(value); return; } alert(value); } var c = new myClass(); var logger = new Logger("console"); logger.write.subscribe(c.onChange);
Observable = function() { // this.observers = []; } Observable.prototype.deliver =function(data) { for (var i in this.observers) { this.observers[i].func.call(this.observers[i].context, data); // } } Function.prototype.subscribe = function(observable, context) { var ctx = context || this; // , this «-», var observer = { // , context: ctx, func: this } observable.observers.push(observer); return this; }
var logger = new Logger("console"); logger.write.subscribe(c.onChange, logger);
Source: https://habr.com/ru/post/131166/
All Articles