如何记录对JavaScript对象成员函数的每次调用?

如何记录对JavaScript对象成员函数的每次调用?,javascript,debugging,Javascript,Debugging,我想避免在JavaScript类的每个方法中插入console.log()语句,但我想通过运行代码和捕获调试输出来知道调用了哪些成员,哪些没有调用 是否有任何类型的钩子或处理程序可以使用,或者有一个调试库,这样我就可以在一个地方修改类或实例,然后查看通过控制台(或类似工具)调用哪些成员 这个班有很多成员,所以这对我来说是一个很有用的节省时间的方法!以及使我能够更轻松地打开和关闭登录 我的第一个问题。。谢谢:)您可以包装实例上的所有函数。例如,假设obj是您要观看的对象: function wra

我想避免在JavaScript类的每个方法中插入console.log()语句,但我想通过运行代码和捕获调试输出来知道调用了哪些成员,哪些没有调用

是否有任何类型的钩子或处理程序可以使用,或者有一个调试库,这样我就可以在一个地方修改类或实例,然后查看通过控制台(或类似工具)调用哪些成员

这个班有很多成员,所以这对我来说是一个很有用的节省时间的方法!以及使我能够更轻松地打开和关闭登录


我的第一个问题。。谢谢:)

您可以包装实例上的所有函数。例如,假设
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()”而不是修改页面本身。