Javascript 在第三方函数返回时执行函数
我需要“检测”第三方函数何时返回,然后执行我自己的函数 示例:一些我没有编写的函数Javascript 在第三方函数返回时执行函数,javascript,Javascript,我需要“检测”第三方函数何时返回,然后执行我自己的函数 示例:一些我没有编写的函数 function foo(params1){ console.log(params1); } 我的职能: function bar(params2){ console.log(params2); } 我需要的是,无论何时调用foo,它都会立即调用bar! 我试着这样做: foo = function(params1){ console.log(params1); bar(params2); }
function foo(params1){
console.log(params1);
}
我的职能:
function bar(params2){
console.log(params2);
}
我需要的是,无论何时调用foo
,它都会立即调用bar
!
我试着这样做:
foo = function(params1){
console.log(params1);
bar(params2);
}
意思是“覆盖”foo
。。但有时(总是),foo
代码太长+传递params2
(次要)问题。
我用原型做了绝望的尝试,所以。。但后来我想我需要一些支持
我也试过这个:(但是)
同样的问题在这里,调用者将调用foo(params1)
,因此bar不会“查找”params2
我需要它来制作类似“事件处理程序”的东西。
第三方函数进行一些ajax调用,对DOM进行操作,我立即采取行动。
有没有一种简洁的方法可以做到这一点?我希望这是有趣的。谢谢。
ps:我想让
params2
全局化,但我仍然需要一个“原始”解决方案:)
至于params2
的使用,假设我想为每个要挂接的函数使用不同的params
示例:
var tmp = foo_1;
foo_1 = function(params1) {
tmp(params1);
bar(params2);
}
tmp = foo_2;
foo_2 = function(params1) {
tmp(params1);
bar(params3);
}
//etc..
如果
foo
是一个全局函数,您可以使用和如下方式将其钩住:
你可以在打电话之前或之后做你的工作。并允许您将原始参数(无论它们是什么)传递到foo
,而无需知道它们是什么
在您的代码示例中,您没有说明params2
来自何处,因此我们很难知道如何将它们注入。您可以从传递给foo
的原始参数中提取它们,您可以将它们构建到函数中或从某个对象中检索它们
以下是您的选项,用于确定params2
应该是什么,并将它们适当地传递给bar()
:
foo
的参数中派生它们,或者将相同的参数传递给bar
,或者查看传递给foo
的参数,然后从这些参数中创建bar
的参数foo
之前,将所需参数放入某种全局可访问变量中的bar
,然后在替换函数中,您可以从该全局变量中获取它们foo
之前,将所需的参数以某种闭包形式放入bar
,以便您可以从替换函数中的闭包中获取它们如果
foo
是一个全局函数,您可以使用和如下方式将其钩住:
你可以在打电话之前或之后做你的工作。并允许您将原始参数(无论它们是什么)传递到foo
,而无需知道它们是什么
在您的代码示例中,您没有说明params2
来自何处,因此我们很难知道如何将它们注入。您可以从传递给foo
的原始参数中提取它们,您可以将它们构建到函数中或从某个对象中检索它们
以下是您的选项,用于确定params2
应该是什么,并将它们适当地传递给bar()
:
foo
的参数中派生它们,或者将相同的参数传递给bar
,或者查看传递给foo
的参数,然后从这些参数中创建bar
的参数foo
之前,将所需参数放入某种全局可访问变量中的bar
,然后在替换函数中,您可以从该全局变量中获取它们foo
之前,将所需的参数以某种闭包形式放入bar
,以便您可以从替换函数中的闭包中获取它们var tmp = foo;
foo = function(params1) {
tmp.apply(this, arguments);
bar(params2);
}
您可以使用将传递给函数
var tmp = foo;
foo = function(params1) {
tmp.apply(this, arguments);
bar(params2);
}
也许您应该使用一个简单的系统在调用foo时得到通知。这将使您对
bar
的调用与foo
分离
(function(){
var footmp = foo;
foo = function(){
var result = footmp.apply(this, arguments);
PubSub.publish('fireBar');
return result;
}
})()
PubSub.subscribe( 'fireBar', function(){
// try to figure out whats params2
bar(params2)
} );
也许您应该使用一个简单的系统在调用foo时得到通知。这将使您对
bar
的调用与foo
分离
(function(){
var footmp = foo;
foo = function(){
var result = footmp.apply(this, arguments);
PubSub.publish('fireBar');
return result;
}
})()
PubSub.subscribe( 'fireBar', function(){
// try to figure out whats params2
bar(params2)
} );
在上一个示例中,
foo
如何知道bar
事件的参数是什么。bar
的参数来自哪里?这就是问题所在。当我说它有效时,我使用的是全局变量而不是参数2(我编辑过),所以什么是params2
?它来自哪里?它是否源自参数1
?是在全球范围内吗?它在某处的物体里吗?它是否总是相同的,以便您可以将其编码到函数中?它并不总是相同的,我希望每个函数的参数都不同,因此我钩住的参数2表示foo,参数3表示foo_2。。等(编辑我的问题)@UnLoCo-你的编辑没有回答我们提出的问题。你不能每次都说参数不一样。你必须告诉我们你如何确定它们是什么或它们来自哪里。这是一个程序。它需要一个算法来确定要添加的参数。在上一个示例中,foo
如何知道bar
事件的参数是什么。bar
的参数来自哪里?这就是问题所在。当我说它有效时,我使用的是全局变量而不是参数2(我编辑过),所以什么是params2
?它来自哪里?它是否源自参数1
?它在一个房间里吗