我正在使用一个用户控件,该控件具有一组javascript函数,在执行某个操作时会调用这些函数。此用户控件在应用程序的许多地方使用。
当一个内置的JS函数完成执行时,我需要在我的页面上触发一个自定义的JS函数。
有没有办法让我附加一个函数,当另一个函数完成执行时被触发?我不想更新内置的JS函数来调用这个页面的JS函数。
希望这是有意义的。
发布于 2011-10-26 05:31:50
有几个设计模式可以用于此,这取决于特定的代码(您尚未共享)以及您可以和不能更改的内容:
选项1:向一些现有代码添加回调:
function mainFunction(callbackWhenDone) {
// do other stuff here
callbackWhenDone();
}因此,您可以使用以下命令调用此函数:
mainFunction(myFunction);选项2:包装上一个函数:
obj.oldMethod = obj.mainFunction;
obj.mainFunction = function() {
this.oldMethod.apply(this, arguments);
// call your stuff here after executing the old method
myFunction();
}所以,现在任何时候只要有人这样做:
obj.mainFunction();它将调用原始方法,然后调用您的函数。
发布于 2011-10-26 05:26:33
您基本上是在尝试进行回调。由于您没有提到您正在讨论的函数(就像在代码中一样),所以最好的做法基本上是包装函数、-quick和脏函数-并使其与回调一起工作。
这样你就可以向它传递一个Lambda (匿名函数),并在它完成后执行任何你想要的东西。
更新以演示如何添加回调:
function my_function($a, $callback) {
alert($a);
$callback();
}
my_function('argument', function() {
alert('Completed');
});发布于 2011-10-26 05:31:46
最丑陋和最好的解决方案是对内置函数打补丁。假设内置函数名为"thirdParty":
// first, store a ref to the original
var copyOfThirdParty = thirdParty;
// then, redefine it
var thirdParty = function() {
// call the original first (passing any necessary args on through)
copyOfThirdParty.apply(this, arguments);
// then do whatever you want when it's done;
// custom code goes here
customFunction();
};我们基本上已经创建了内置函数的修改版本,而没有接触到原始版本。
https://stackoverflow.com/questions/7896063
复制相似问题