如何记录对JavaScript对象成员函数的每次调用?
我想避免在JavaScript类的每个方法中插入console.log()语句,但我想通过运行代码和捕获调试输出来知道调用了哪些成员,哪些没有调用 是否有任何类型的钩子或处理程序可以使用,或者有一个调试库,这样我就可以在一个地方修改类或实例,然后查看通过控制台(或类似工具)调用哪些成员 这个班有很多成员,所以这对我来说是一个很有用的节省时间的方法!以及使我能够更轻松地打开和关闭登录如何记录对JavaScript对象成员函数的每次调用?,javascript,debugging,Javascript,Debugging,我想避免在JavaScript类的每个方法中插入console.log()语句,但我想通过运行代码和捕获调试输出来知道调用了哪些成员,哪些没有调用 是否有任何类型的钩子或处理程序可以使用,或者有一个调试库,这样我就可以在一个地方修改类或实例,然后查看通过控制台(或类似工具)调用哪些成员 这个班有很多成员,所以这对我来说是一个很有用的节省时间的方法!以及使我能够更轻松地打开和关闭登录 我的第一个问题。。谢谢:)您可以包装实例上的所有函数。例如,假设obj是您要观看的对象: function wra
我的第一个问题。。谢谢:)您可以包装实例上的所有函数。例如,假设
obj
是您要观看的对象:
function wrapObjectFunctions(obj, before, after) {
var key, value;
for (key in obj) {
value = obj[key];
if (typeof value === "function") {
wrapFunction(obj, key, value);
}
}
function wrapFunction(obj, fname, f) {
obj[fname] = function() {
var rv;
if (before) {
before(fname, this, arguments);
}
rv = f.apply(this, arguments); // Calls the original
if (after) {
after(fname, this, arguments, rv);
}
console.log( /*...*/ );
return rv;
};
}
}
(arguments
在上面,如果您不熟悉的话,它是JavaScript提供的一个神奇的伪数组,其中包含调用函数的参数。我知道它看起来像伪代码,但它不是。)
现场示例:
函数对象(名称){
this.name=名称;
}
Thing.prototype.sayName=函数(){
log(“我的名字是”+this.name);
};
var t=新事物(“Fred”);
log(“包装前:”;
t、 sayName();//我叫弗雷德,没有额外的日志记录
snippet.log(“---”);
WrapObject函数(
T
功能(fname){
log(“日志:在调用“+fname”之前);
},
功能(fname){
log(“log:after calling”+fname);
}
);
log(“包装后:”);
t、 sayName();//我叫弗雷德,没有额外的日志记录
函数wrapObjectFunctions(对象、之前、之后){
var键,值;
用于(输入obj){
值=对象[键];
如果(值的类型==“函数”){
wrapFunction(对象、键、值);
}
}
函数包装函数(obj、fname、f){
obj[fname]=函数(){
var-rv;
如果(之前){
前(fname、this、arguments);
}
rv=f.apply(this,arguments);//调用原始
如果(之后){
之后(fname、this、arguments、rv);
}
console.log(/*…*/);
返回rv;
};
}
}
Chrome调试器具有许多功能,包括您可能感兴趣的。这种方法的开销为零,并且不需要修改您试图观察的代码。非常有用,谢谢!顺便说一句,我将snippet.js改为使用“console.log()”而不是修改页面本身。