Rx.Observable.prototype.where = function (obj) { var me = this; return Rx.Observable.create(function (observer) { me.subscribe({ next: function (v) { for (var key in obj) { if (v[key] !== obj[key]) { return; } } observer.next(v); }, error: function (err) { observer.error(err) }, complete: function () { observer.complete() } }); }); } var store = { message: 1 }; var subject = new Rx.Subject(); subject .where({ name: 'increment' }) .subscribe({ next: function (e) { store.message++; } }); subject .where({ name: 'decrement' }) .subscribe({ next: function (e) { store.message--; } }); var app = new Vue({ el: '#app', data: store, methods: { increment: function () { subject.next({ name: 'increment' }); }, decrement: function () { subject.next({ name: 'decrement' }); } } });