為了不用改太動太多舊的程式,
所以在客戶端寫了一個類 Emitter 的東西.
記錄一下
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
| <script type="text/javascript"> (function(window) { var Emitter = function() { }; Emitter.prototype.on = function(name, callback) { this.emitterEvent = this.emitterEvent || {}; this.emitterEvent[name] = this.emitterEvent[name] || []; this.emitterEvent[name].push(callback); }; Emitter.prototype.emit = function(name) { this.emitterEvent = this.emitterEvent || {}; if (this.emitterEvent.hasOwnProperty(name) === true) { for(var i = 0, n = this.emitterEvent[name].length; i < n; i++){ this.emitterEvent[name][i].apply(this, Array.prototype.slice.call(arguments, 1)); } } }; Emitter.prototype.mixin = function(object) { Object.keys(Emitter.prototype).forEach(function(name) { object.prototype[name] = Emitter.prototype[name]; }); };
window.Emitter = new Emitter(); })(window); </script>
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| <script type="text/javascript"> var Ticker = function() { var self = this; setInterval(function() { self.emit('tick', new Date(), "ohter parameters"); }, 1000); }
Emitter.mixin(Ticker);
new Ticker().on('tick', function(data, params) { console.log(data, params); }) </script>
|