首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在函数执行完成时调用函数?- Javascript

问如何在函数执行完成时调用函数?- Javascript
EN

Stack Overflow用户
提问于 2011-10-26 05:22:56
回答 4查看 144关注 0票数 1

我正在使用一个用户控件,该控件具有一组javascript函数,在执行某个操作时会调用这些函数。此用户控件在应用程序的许多地方使用。

当一个内置的JS函数完成执行时,我需要在我的页面上触发一个自定义的JS函数。

有没有办法让我附加一个函数,当另一个函数完成执行时被触发?我不想更新内置的JS函数来调用这个页面的JS函数。

希望这是有意义的。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2011-10-26 05:31:50

有几个设计模式可以用于此,这取决于特定的代码(您尚未共享)以及您可以和不能更改的内容:

选项1:向一些现有代码添加回调:

代码语言:javascript
复制
function mainFunction(callbackWhenDone) {
    // do other stuff here
    callbackWhenDone();
}

因此,您可以使用以下命令调用此函数:

代码语言:javascript
复制
mainFunction(myFunction);

选项2:包装上一个函数:

代码语言:javascript
复制
obj.oldMethod = obj.mainFunction;
obj.mainFunction = function() {
    this.oldMethod.apply(this, arguments);
    // call your stuff here after executing the old method
    myFunction();
}

所以,现在任何时候只要有人这样做:

代码语言:javascript
复制
obj.mainFunction();

它将调用原始方法,然后调用您的函数。

票数 4
EN

Stack Overflow用户

发布于 2011-10-26 05:26:33

您基本上是在尝试进行回调。由于您没有提到您正在讨论的函数(就像在代码中一样),所以最好的做法基本上是包装函数、-quick和脏函数-并使其与回调一起工作。

这样你就可以向它传递一个Lambda (匿名函数),并在它完成后执行任何你想要的东西。

更新以演示如何添加回调:

代码语言:javascript
复制
function my_function($a, $callback) {
   alert($a);
   $callback();
}

my_function('argument', function() { 
  alert('Completed');
});
票数 2
EN

Stack Overflow用户

发布于 2011-10-26 05:31:46

最丑陋和最好的解决方案是对内置函数打补丁。假设内置函数名为"thirdParty":

代码语言:javascript
复制
// 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();
};

我们基本上已经创建了内置函数的修改版本,而没有接触到原始版本。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7896063

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档