2013-06-19 126 views
0

所以我有一个递归函数用于反转颜色。下面是代码:在执行函数时执行某些操作jquery

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的点击,悬停在特定类等),我不知道他们。但是我需要知道每一次这个函数被调用。我怎么能有一个外部代码行设置一个变量等于函数被调用的次数?

+1

如果要计算函数调用自身的次数,则需要修改其源代码。 – bfavaretto

+0

除了函数之外,没有办法计算函数在递归时触发了多少次?我发现很难相信 –

+0

@RyanSaxe很难相信你不能重写一个函数 –

回答

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 
+0

请重新阅读问题...我做了一个编辑,以便它可能完全超出原始函数的范围,因为函数不再是递归的 –

+0

@RyanSaxe你试过这个答案吗? –

+0

@RyanSaxe你是否说过函数'invert'是在你无权访问的范围中声明的? –

0

我不知道您的具体情况是什么,但也许你可以用包装材料覆盖功能:

var invertOriginal = invert; 
var counter = 0; 

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

    // do counter stuff here, e.g. 
    counter++; 
}; 
+0

不能改变原函数 –

+0

这不会改变原来的函数。它只是“重命名”该函数并调用重命名的版本。您可以在不修改原始源代码的情况下使用此代码 – compid

+0

请重新阅读该问题...我已经进行编辑,以便可能完全超出原始函数,因为函数不再是递归的 –

相关问题