问题
I'm a beginner with JavaScript so please be patient =)
I am trying to write a function that counts the number of times it is called. What I have so far is a function with a counter that is incremented explicitly:
var increment = function () {
var i = 0;
this.inc = function () {i += 1;};
this.get = function () {return i;};
};
var ob = new increment();
ob.inc();
ob.inc();
alert(ob.get());
But I'm wondering how to call only ob();, so the function could increment calls made to itself automatically. Is this possible and if so, how?
回答1:
var increment = function() {
var i = 0;
return function() { return i += 1; };
};
var ob = increment();
回答2:
ob = function f(){
++f.i || (f.i=1); // initialize or increment a counter in the function object
return f.i;
}
回答3:
Wrap a counter to any function:
/**
* Wrap a counter to a function
* Count how many times a function is called
* @param {Function} fn Function to count
* @param {Number} count Counter, default to 1
*/
function addCounterToFn(fn, count = 1) {
return function () {
fn.apply(null, arguments);
return count++;
}
}
See https://jsfiddle.net/n50eszwm/
来源:https://stackoverflow.com/questions/7243101/function-count-calls