0

所以我有一个用于反转颜色的递归函数。这是代码:

function invert(id,what){
    var color = $(id).css(what);
    var matchColors = /rgb\((\d{1,3}), (\d{1,3}), (\d{1,3})\)/;
    var match = matchColors.exec(color);
    var r = (255 - match[1]).toString() + ",";
    var g = (255 - match[2]).toString() + ",";
    var b = (255 - match[3]).toString();
    answer = 'rgb(' + r + g + b + ')' ;
    $(id).css(what,answer);
};

所以基本上我有一个可以在许多情况下调用的函数(点击特定的 id,悬停在特定的类上等),但我并不知道所有这些。但是我每次调用这个函数时都需要知道。我怎样才能有一个外部代码行来设置一个变量等于函数被调用的次数?

4

2 回答 2

6

包装你的功能

var wrapped = (function wrapper(present) {
    function wrapping() {
        ++wrapping.count; // increment invocation count
        return present.apply(this, arguments);
    }
    wrapping.count = 0; // counter, avaliable from outside too
    return wrapping;
}(invert));

如果您也需要调用它invert,请在之后重新分配invert

invert = wrapped;
invert.count; // 0
invert();
invert.count; // 1
invert();
invert.count; // 2
于 2013-06-19T22:22:28.227 回答
0

我不确定您的确切情况是什么,但也许您可以使用包装器覆盖该函数:

var invertOriginal = invert;
var counter = 0;

var invert = function(id, what, max) {
  invertOriginal(id, what, max); 

  // do counter stuff here, e.g.
  counter++; 
};
于 2013-06-19T22:21:39.900 回答