哪个函数更改变量

时间:2015-09-08 16:54:29

标签: javascript debugging google-chrome-devtools

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

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

有可能做到这一点吗?

3 个答案:

答案 0 :(得分:2)

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

寻找使用object.observe

的答案

答案 1 :(得分:2)

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

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

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

enter image description here

答案 2 :(得分:1)

正如@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.