哪个函数改变一个变量
Which function changes a variable
我有一个变量 foo
,它的值会不时变化。我的代码很大,
所以不知道哪里改了
我想知道是否有可能知道 foo
的值在哪里被操纵。我不在乎我是否可以通过 chrome 调试器或通过 javascript 代码解决它。
有可能做到这一点吗?
您可以将 object.observe 直接添加到 chrome 开发工具中,以便在您的 属性 更改时获得控制台消息。看看这个:How to "break on property change" in chrome?
寻找使用object.observe
的答案
正如@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.
当你声明foo
时,你可以这样做:
Object.defineProperty(window, "foo", {
set: function (x) { this.value = x; console.trace() },
get: function() { return this.value; }
});
然后,只要设置 foo
,它就会 运行 console.trace()
。
我有一个变量 foo
,它的值会不时变化。我的代码很大,
所以不知道哪里改了
我想知道是否有可能知道 foo
的值在哪里被操纵。我不在乎我是否可以通过 chrome 调试器或通过 javascript 代码解决它。
有可能做到这一点吗?
您可以将 object.observe 直接添加到 chrome 开发工具中,以便在您的 属性 更改时获得控制台消息。看看这个:How to "break on property change" in chrome?
寻找使用object.observe
的答案正如@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.
当你声明foo
时,你可以这样做:
Object.defineProperty(window, "foo", {
set: function (x) { this.value = x; console.trace() },
get: function() { return this.value; }
});
然后,只要设置 foo
,它就会 运行 console.trace()
。