我们有一个使用jQuery的胖客户端应用程序,并且希望使用firebug的console.profile API来分析代码的性能。问题是,我不想更改代码以编写配置文件语句。举个例子:
var search = function(){
this.init = function(){
console.log('init');
}
this.ajax = function(){
console.log('ajax');
//使用$ .ajax进行ajax调用,并在此处进行一些DOM操作。
}
this.cache = function(){
console.log('cache');
}
}
var instance = new search();
instance.ajax();
我想对我的instance.ajax方法进行概要分析,但是我不想在代码中添加概要文件语句,因为这使得难以维护代码。
我正在尝试使用闭包覆盖方法,如下所示:http://www.novogeek.com/post/2010/02/27/Overriding-jQueryJavaScript-functions-using-closures.aspx,但不确定如何实现。关于这个有什么建议吗?我认为这将有助于许多大型项目轻松地对代码进行概要分析,而无需对代码进行大的更改。
这是主意。只需在firebug控制台中运行以下代码,即可了解我要实现的目标。
var search = function(){
this.init = function(){
console.log('init');
}
this.ajax = function(){
console.log('ajax');
//使用$ .ajax进行ajax调用,并在此处进行一些DOM操作。
}
this.cache = function(){
console.log('cache');
}
}
var instance = new search();
$ .each(instance,function(functionName,functionBody){
(功能(){
var dup = functionBody
functionBody = function(){
console.log('修改旧函数:',functionName);
console.profile(functionName);
dup.apply(this,arguments);
console.profileEnd(functionName);
}
})();
console.log(functionName,'::',functionBody());
});
现在我需要的是,如果我说instance.ajax(),我想调用新的ajax()方法以及console.profile语句。希望我对要求有所了解。请即兴编写以上代码。
问候,
克里希纳
http://www.novogeek.com
最佳答案
如果您只想修改“搜索”的单个实例,那么这应该起作用:
$.each(instance, function(name, method){
if (typeof method !== 'function') return;
instance[name] = function() {
console.profile(name);
var ret = method.apply(this, arguments);
console.profileEnd(name);
return ret;
};
});
关于javascript - 快速将console.profile语句添加到JavaScript/jQuery代码,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2939704/