是否可以通过回调检测javascript变量中的更改?

是否可以通过回调检测javascript变量中的更改?,javascript,jquery,Javascript,Jquery,有没有一种方法可以添加侦听器或将事件绑定到值而不是html元素 因此,当值更改时,而不是单击按钮时,会触发事件,等等 假设代码: var changingValue = 1; $('button').on('click',function(){ changingValue = changingValue + 1; }); $(changingValue).on('change',function(){ alert("event triggered, the new value

有没有一种方法可以添加侦听器或将事件绑定到值而不是html元素

因此,当值更改时,而不是单击按钮时,会触发事件,等等

假设代码:

var changingValue = 1;

$('button').on('click',function(){
    changingValue = changingValue + 1;
});

$(changingValue).on('change',function(){
    alert("event triggered, the new value is:" + this)
});

如果使用这样的对象,则可以:

function Changing(initialValue, valueListener) {
    this._value = initialValue;
    this._listener = valueListener;
}
Object.defineProperties(Changing.prototype, {
    value: {
        get: function() {
            return this._value;
        },
        set: function(value) {
            this._value = value;
            this._listener(this._value);
        }
    }
});
然后你可以做:

var changingValue = new Changing(1, function(value) {
    alert("event triggered, the new value is: " + value);
});

$('button').on('click',function(){
    changingValue.value += 1; // will alert "event triggered, the new value is: ..."
});

我不明白,如果你点击按钮,值就会增加。这是您的更改事件。
changingValue
应该是一个有效的选择器。例如,我有一个整数,它被几个方法修改。与将同一事件添加到其他几个方法相比,将事件添加到正在更改的值将更简单,代码也更少。重复的问题在过去的4年里没有得到证实的答案,这就是我再次问的原因。谢谢你的评论。谢谢,看起来很管用。关于浏览器兼容性有什么想法吗?它应该适用于所有现代浏览器,但是如果你需要的话,还有一个polyfill@SamJones