是否可以在每次特定功能运行时执行某些操作而不知道该功能的名称?
这类似于bind
var clicked = 0;
$('#foo').bind('click',function(){
clicked += 1;
alert(clicked);
});
所以,每次点击ID为foo
的内容时,它都会向变量clicked
添加1,以便我知道它被点击了多少次。如果语法正确,我想要做的就是以下内容:
var fired = 0;
$('my_function').bind('run',function(){
fired += 1;
alert(fired);
});
我不在乎你是否会在任何特定的情况下,你总能找到关于功能的东西并使用它,我不想解决问题,这就是我想要的答案:
每当特定函数运行时,我如何执行某些操作,只需给出函数的名称。如果那是不可能的,为什么不呢?
答案 0 :(得分:2)
尝试这样的事情:
var temp = my_function, fired = 0;
my_function = function() {
fired++;
temp.apply(this,arguments);
}
答案 1 :(得分:1)
我认为这样的事情可能是你最接近的事情:
function adjustFunctionToCount(f){
var count = 0;
function newF(){
count++;
f.apply(this, arguments);
}
newF.getCount = function(){ return count; };
return newF;
}
所以,如果你有
function handler(val){
console.log('called with val ' + val);
}
你可以做到
handler = adjustFunctionToCount(handler);
handler('a');
handler('b');
console.log(handler.getCount());
不用说你可以在线创建你的功能
var handler = adjustFunctionToCount(function(val){ console.log('called with val ' + val); });
handler('a');
handler('b');
console.log(handler.getCount());
答案 2 :(得分:0)
我很确定在一般情况下这是不可能的。
请记住,函数是对象,实际上,函数的名称只是一个变量。函数可以存在而不分配给命名变量,变量可以超出范围,或重新分配/交换。在任何情况下,我都知道没有API可以让你挂钩到JS函数调用。
答案 3 :(得分:0)
这是事件驱动编程的用武之地 - 而jQuery使得它非常容易。
var myFunction = function() {
//...
//...
//...
$(document).trigger('someEvent');
}
$(document).on('someEvent',function() {
//the function you would like to run every time myFunction is called
});
答案 4 :(得分:0)
试试这个:
var count = (function(){
var c = 0;
return function(){
alert(c++);
};
})();
$('#foo').click(count);
OR
$('#foo').bind('click', count);
当传递表示函数的匿名函数或变量时,它是相同的。您可以创建自己的代码来执行这样的函数:
function executeFun(func){
return func();
}
executeFun(count)
executeFun(function(){
/*everything happens in here. The Anonymous Function will be called
automatically because of the parameter next to the variable func above */
})
虽然这个例子不切实际,但它会向你展示内部发生的事情。另外,我用Closure解决了你潜在的全局范围变量问题。有关闭包的更多信息,请访问https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Closures。