为了账号安全,请及时绑定邮箱和手机立即绑定

侦听JavaScript中的变量更改

侦听JavaScript中的变量更改

白衣染霜花 2019-06-05 13:54:16
侦听JavaScript中的变量更改是否有可能在JS中有一个事件在某个变量的值发生变化时触发?接受jQuery。
查看完整描述

3 回答

?
千巷猫影

TA贡献1829条经验 获得超7个赞

没有。

但是,如果它真的那么重要,那么您有两个选项(第一个是测试的,第二个不是):

首先,使用setter和getter,如下所示:

var myobj = {a : 1};function create_gets_sets(obj) { // make this a framework/global function
    var proxy = {}
    for ( var i in obj ) {
        if (obj.hasOwnProperty(i)) {
            var k = i;
            proxy["set_"+i] = function (val) { this[k] = val; };
            proxy["get_"+i] = function ()    { return this[k]; };
        }
    }
    for (var i in proxy) {
        if (proxy.hasOwnProperty(i)) {
            obj[i] = proxy[i];
        }
    }}create_gets_sets(myobj);

然后你就可以做这样的事情:

function listen_to(obj, prop, handler) {
    var current_setter = obj["set_" + prop];
    var old_val = obj["get_" + prop]();
    obj["set_" + prop] = function(val) { current_setter.apply(obj, [old_val, val]); handler(val));}

然后将侦听器设置为:

listen_to(myobj, "a", function(oldval, newval) {
    alert("old : " + oldval + " new : " + newval);}

第二,我实际上忘了,我会在考虑这件事的时候提交:)

编辑:哦,我记得:)你可以把手表的价值:

上面给出了“a”,上面写着:

function watch(obj, prop, handler) { // make this a framework/global function
    var currval = obj[prop];
    function callback() {
        if (obj[prop] != currval) {
            var temp = currval;
            currval = obj[prop];
            handler(temp, currval);
        }
    }
    return callback;}var myhandler = function (oldval, newval) {
    //do something};var intervalH = setInterval(watch(myobj, "a", myhandler), 100);myobj.set_a(2);


查看完整回答
反对 回复 2019-06-05
  • 3 回答
  • 0 关注
  • 427 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信