我有一个变量foo
,其值会不时变化。我的代码很大,
所以我不知道它在哪里被改变了。
我想知道是否有可能知道foo
的值被操纵的位置。我不在乎我是否可以通过chrome调试器或javascript代码解决它。
有可能做到这一点吗?
答案 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()
。
答案 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.