Function count calls

纵然是瞬间 提交于 2019-12-19 07:52:48

问题


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

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!