2016-03-15 19 views

risposta

2

Forse usando un proxy è un'opzione, anche se è necessario sostituire l'oggetto originale

const { Subject } = require('rxjs'); 

// Take an object, and return a proxy with an 'observation$' stream 
const toObservableObject = targetObject => { 
    const observation$ = new Subject(); 
    return new Proxy(targetObject, { 
     set: (target, name, value) => { 
      const oldValue = target[name]; 
      const newValue = value; 
      target[name] = value; 
      observation$.next({ name, oldValue, newValue }); 
     }, 

     get: (target, name) => name == 'observation$' ? observation$ : target[name] 
    }); 
} 

const observableObject = toObservableObject({ }); 

observableObject.observation$ 
    .filter(modification => modification.name == 'something') 
    .subscribe(({ name, oldValue, newValue }) => console.log(`${name} changed from ${oldValue} to ${newValue}`)); 

observableObject.something = 1; 
observableObject.something = 2; 

L'uscita

something changed from undefined to 1 
something changed from 1 to 2 

Cercare Proxy nelle versioni nodo corrente tabella compatibilità ha appoggio) https://kangax.github.io/compat-table/es6/

E documentazione del proxy a https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Proxy