每次调用各种函数时,我都会记录下来。我有一个名为
的函数 record_activity( function_name );
我真的不想在我想跟踪的每个函数的顶部写这个。目前,格式中有许多功能:
Object.Key.Func = function() { ... }
我写过这篇文章似乎有用,但我真的不确定它的含义:
function sub ( variable, func ) {
var temp_func = function ( args ) {
record_activity( variable );
return func.apply(this,arguments);
}
eval( variable + ' = ' + temp_func );
}
sub( 'Object.Key.Func', function (name) { alert('hi ' + name) } );
Object.Key.Func('test');
如果有办法在没有评估的情况下这样做,我会更开心。
感谢
答案 0 :(得分:0)
我认为您可以为要跟踪的每个func创建一个包装器函数。希望以下代码可以帮助您:
var counter = {};
// assume this is what record_activity has to do.
function record_activity (f, func_name, args) {
counter[func_name] = counter[func_name]===undefined ? 1 : counter[func_name]+1;
}
// assume that you want to keep track of functional call obj.foo and obj.bar
var obj = {
a: 3,
foo: function () {
console.log("foo");
},
bar: function (b) {
console.log("bar", this.a, b);
}
};
function create_func (f, func_name) {
return function () {
record_activity(f, func_name, arguments);
f.apply(obj, arguments);
};
}
for(var prop in obj) {
if (typeof obj[prop] === 'function') {
// create the wrapper func
obj[prop] = create_func(obj[prop], prop);
}
};
// test
for (var i = 0; i < 3; i++) {
obj.foo();
};
for (var i = 0; i < 10; i++) {
obj.bar(i);
};
console.log(counter);