Skip to content

Instantly share code, notes, and snippets.

@LeonardoCiaccio
Created August 1, 2015 12:43
Show Gist options
  • Save LeonardoCiaccio/6cabdf629adafb8869a8 to your computer and use it in GitHub Desktop.
Save LeonardoCiaccio/6cabdf629adafb8869a8 to your computer and use it in GitHub Desktop.
Monitoraggio di variabili [esempio](http://jsfiddle.net/leonardo_ciaccio/1q2stz78/)
/*
IDEA :
Monitorare il cambiamento di una variabile, per fare questo
dobbiamo utilizzare un oggetto che ci fornisce la possibilità
di utilizare una variabile di qualsiasi tipo purché non sia una
funzione ( JSON compatibile ) .
In sintesi ogni volta che cambia l'oggetto questo esegue una
operazione.
L'esempio utilizza un timeout per simulare un ritardo, questo non
è necessario al fine dell'idea.
PRO :
Controllare lo stato di una variabile a volte risulta
indispensabile per il controllo del codice.
CONTRO :
Come questo esempio occorrono almeno 50 millisecondi per il
trigger dell'evento dal cambiamento della variabile.
*/
// Oggetto da tenere sotto controllo
var _ = {
mex : ""
},
// Copia shadow per il confronto
eye,
// Funzione per clonare un oggetto
clone = function( obj ){
if( !obj || typeof obj != "object" )return {};
var news = {};
for( var key in obj ) {
news[ key ] = obj[ key ];
}
return news;
},
// Evento per ogni cambiamento
observe = function( callback ){
callback = callback || function(){};
eye = clone( _ );
setInterval( function(){
if( JSON.stringify( _ ) !== JSON.stringify( eye ) ){
callback( eye, _ );
eye = clone( _ );
}
} );
};
// Attivo la sentinella
observe( function( old, last ){
// old = l'oggetto prima del cambiamento
// last = l'oggetto aggiornato
console.log( last.mex );
} );
// Setto un nuovo valore
_.mex = "Ciao !";
// Per simulare un vento in ritardo
setTimeout( function(){
_.mex = "Tutto ok 1?";
} );
/*
Dopo un piccolo ritardo setto di nuovo la variabile
se il tempo intercorso è troppo breve il trigger
precedente non viene preso in considerazione.
Nel mio caso 50 millisendi bastano per garantire entrambi.
*/
setTimeout( function(){
_.mex = "Tutto ok 2?";
}, 50 );
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment