【问题标题】:Which function changes a variable哪个函数改变一个变量
【发布时间】:2015-12-04 11:02:32
【问题描述】:

我有一个变量foo,它的值会不时变化。我的代码很大, 所以不知道哪里改了。

我想知道是否有可能知道foo 的值在哪里被操纵。我不在乎我是否可以通过 chrome 调试器或通过 javascript 代码解决它。

有可能这样做吗?

【问题讨论】:

标签: javascript debugging google-chrome-devtools


【解决方案1】:

您可以将 object.observe 直接添加到 chrome 开发工具中,以便在您的属性更改时获取控制台消息。看看这个:How to "break on property change" in chrome?

寻找使用 object.observe 的答案

【讨论】:

    【解决方案2】:

    正如@ChadMcGrath 指出的那样,Object.observe 可能是您想要的,但还有一些其他选项可用,例如,如果变量是对象的属性,您可以为它定义一个 setter:

    var o = {};
    Object.defineProperty(o, "myProperty",{ 
      set: function (x) {
        console.log("Set myProperty to", x);
        console.trace();
        this.value = x; 
      },
      get: function () {
        return this.value;
      },
    });
    

    在 ECMAScript 2015 中,您可以使用 Proxy,但这在大多数浏览器中尚不可用:

    var handler = {
        set: function(target, name, value, receiver){
            console.log("Set", name, "to", value);
            console.trace();
            target[name] = value;
        }
    };
    
    var o = new Proxy({}, handler);
    o.myProperty = 1; //Will console log and give you a trace.
    

    【讨论】:

      【解决方案3】:

      当你声明foo时,你可以这样做:

      Object.defineProperty(window, "foo", { 
          set: function (x) { this.value = x; console.trace() }, 
          get: function() { return this.value; }
      });
      

      然后,只要设置了foo,它就会运行console.trace()

      【讨论】:

      • 忘记了 defineProperty 中的 this.value。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-03-21
      • 2019-07-26
      • 1970-01-01
      • 2015-03-03
      • 2023-03-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多