JSFiddle - React, Tailwind, and code Playground
HTML
<textarea id = "context" cols = "70" rows = "15"></textarea>
JavaScript
try{
var info = function(str){
var x = document.getElementById('context');
if(str !== undefined){ x.value += str + '\n'; }
else{ x.value = ' '; }
try{ x.scrollTop = x.scrollHeight;; }catch(e){ }
}
var warp = function( obj, prop, setcallback, interval ){
try{
var val = obj[prop];
if( !obj ){ obj = window; }
if(Object.defineProperty){
Object.defineProperty( obj, prop, {
get : function () { try{ return obj[prop]; }catch(e){ return; } }
, set : function ( value ) {
try{
val = value;
if(setcallback){
if(interval) { window.setTimeout( function(){
setcallback( value, prop, obj );
}, interval); }else{ setcallback( value, prop, obj ); }
}
return val;
}catch(e){ return; }
}
});
}else{
if(!interval){ interval = 1000; }
var intvl = window.setInterval( function(){
if(obj[prop] !== undefined){
if( val != obj[prop] ){
val = obj[ prop ];
if( setcallback ){ setcallback( val, prop, obj ); }
}
}else{ window.clearInterval( intvl ); }
}, interval);
}
}catch(e){ return; }
}
var observe = function( value , setcallback ){
return function( val ){
try{
if( val !== undefined ){
if( val != value ){
value = val;
if( setcallback ){ setcallback( value ); }
}
}else{ return value; }
}catch(er){ alert(er); }
};
}
var obj = { prop : 111, observe : observe ( 222,
function( val ){ info( 'observe : ' + val ); } ) };
warp( obj, 'prop', function( val ){ info( 'callback for prop : ' + val ) }, 100 );
var count1 = 0;
window.setInterval( function(){ count1++; obj.prop = count1; }, 5000 );
var count2 = 0;
...