使用不接受回调的函数实现回调?

时间:2011-11-08 22:04:00

标签: javascript

这是一个新手问题:我有一个预先存在的函数,我希望在完成时调用另一个函数,但是,它不接受回调,当然也不会调用它。我可以修改这个代码来接受并调用一个函数但是这让我想到JavaScript是否支持这样做......我认为它确实如此但我从来没有理由找到这个,我假设它在工作时是必要的使用库,我们无法根据自己的喜好更改代码。感谢。

4 个答案:

答案 0 :(得分:1)

您需要回调的唯一时间是您正在执行异步操作,例如:

  • 发出HTTP请求(并等待回复)
  • 动画一些东西,每个时间段一帧,直到完成
  • 等待用户点击按钮

当发生某些事情时,所有这些都被视为“完成”,但没有通用的方法来确定事情何时发生。你需要为每个人定制一些东西。

如果你没有等待某事,那么你可以在另一个之后调用一个函数(foo();bar();),而不需要摆弄回调。

因此...

有可能做你想做的事,但我们不能告诉你实现它的通用方法。

答案 1 :(得分:1)

这有点像黑客攻击,我确信有多种方法可以用多态来做到这一点,但你可以把这个函数当作一个变量来重新分配它:

假设你从这个功能开始:

function originalFunctionName()
{
 // do something
}

您可以将现有功能分配给新名称:

var backupOfOriginal = originalFunction;

然后你可以在原始名称上定义一个新函数:

var originalFunctionName = function()
{
  // do something else
  // call backup function
  backupOfOriginal();
}

然后如果你调用原始函数名称:

originalFunctionName();

所有代码都将执行。

答案 2 :(得分:1)

您始终可以创建一个新函数来调用该函数,并为您提供在调用之前和之后执行其他操作的机会。 Underscore.js provides .wrap() to do exactly that sort of thing并返回一个你可以调用的函数而不是第一个函数。

这只是给你一个新的函数来调用而不是你的原始函数,如果你想要调用原始函数的每个点来获得新的行为,你可以利用JavaScript的原型继承来替换你的原始函数新版本。

答案 3 :(得分:0)

创建一个包装函数,调用原始函数,然后传入一个函数。

如果原始函数是一个Ajax调用而你试图替换它的一个处理程序,那就是一个不同的问题,尽管你可能能够使用jQuery的$ .when(原始).then(function(){。 ..})取决于你的实际需要。