JSFiddle - React, Tailwind, and code Playground

HTML

<input type="button" id="test" value="click me" />

JavaScript

function observable(v){
    this.value = v;
    
    this.valueChangedCallback = null;
    
    this.setValue = function(v){
        if(this.value != v){
            this.value = v;
            this.raiseChangedEvent(v);
        }
    };

    this.getValue = function(){
        return this.value;
    };
    
    this.onChange = function(callback){
        this.valueChangedCallback = callback;
    };
    
    this.raiseChangedEvent = function(v){
        if(this.valueChangedCallback){
             this.valueChangedCallback(v);
        }   
    };
}
    
var obs = new observable(123);
obs.onChange(function(v){
         alert("value changed to: " + v); 
     });

$('#test').click(function(){
    alert("clicky");
   obs.setValue(456); 
});