我想使用JavaScript代码来“记录”全局变量的值。例如,我想知道特定变量 foo 在执行期间的所有值。记录不是问题。
实现这个最简单的方法是什么?我正在考虑使用Rhino(由Mozilla创建的Java中的JavaScript实现)来生成AST并修改此AST。
答案 0 :(得分:1)
这可能是您正在寻找的:
http://ejohn.org/blog/javascript-getters-and-setters/
在setter中登录,就是这样。当然,我不知道这实际上在哪里,如果它必须是可信代码,或任何网页,或什么。
根据John Resig的代码,我会在调试代码中添加如下内容:
var placeLoggerInSetter = function(variableName, obj){ //obj may be window
obj.__defineSetter__(variableName, function(val){
console.log(val); //log whatever here
obj[variableName] = val;
});
}
var something = 0;
placeLoggerInSetter("something", window);
something = 1;
//out goes "1" in the console
something = 2
//out goes "2" in the console
那更像是吗?再一次,我没有测试它,obj[variableName]
线看起来非常递归我...你会告诉它是否有效吗? :)
此外,还有Firebug,
console.dir(obj)
将允许您在控制台中查看该对象的所有属性,而不是像log()
一样将其转换为字符串。并且还扩展了属性等。方便。
答案 1 :(得分:1)
如果您不限于Rhino / Java,那么Johnson Ruby gem会将Spidermonkey / Tracemonkey解释器集成到Ruby中。它确实提供了对AST的访问。我没有尝试修改AST;不确定是否可能(可能是,根据所看到的代码中的名称判断)。
Johnson的宝石出现在github的jbarnette的Johnson回购中。 (切换ID; Stackoverflow不希望我在此时放入链接...)我最近添加了tracemonkey支持,但它尚未集成到主源中。这是我(smparkes)的约翰逊回复在github。
答案 2 :(得分:0)
Firebug(firefox的插件)具有日志记录功能,您可以将其写入控制台。比使用alert(“foo”)要好得多;为了一切
示例日志声明:
console.log("foo="+foo);
有关详细信息,请参阅this post(包括更多高级用法)
答案 3 :(得分:0)
我不知道通用解决方案或存在的任何东西,只需将这些变量包装在处理get / sets和stuff的日志类中。
答案 4 :(得分:0)
您可以使用Dtrace:
答案 5 :(得分:0)
您可以设置调试器;作为文档就绪事件的第一件事,只需逐步执行代码。
..弗雷德里克
答案 6 :(得分:0)
使用cvshead版本的Rhino,我检测了代码。