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
    ?它在一个房间里吗