这是一个新手问题:我有一个预先存在的函数,我希望在完成时调用另一个函数,但是,它不接受回调,当然也不会调用它。我可以修改这个代码来接受并调用一个函数但是这让我想到JavaScript是否支持这样做......我认为它确实如此但我从来没有理由找到这个,我假设它在工作时是必要的使用库,我们无法根据自己的喜好更改代码。感谢。
答案 0 :(得分:1)
您需要回调的唯一时间是您正在执行异步操作,例如:
当发生某些事情时,所有这些都被视为“完成”,但没有通用的方法来确定事情何时发生。你需要为每个人定制一些东西。
如果你没有等待某事,那么你可以在另一个之后调用一个函数(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(){。 ..})取决于你的实际需要。