【问题标题】:passing a self function as a callback using closure/function binding使用闭包/函数绑定将 self 函数作为回调传递
【发布时间】:2016-08-02 13:00:17
【问题描述】:

是否可以使用闭包或函数绑定将 self 函数作为参数从函数本身传递给回调?

我使用了一些代码来更好地解释我想要实现的目标。

x: function(a, b, c){
 if(certain conditions not met){
   y(pass function x as argument along with arguments a,b,c for callback);
 }
 //blah blah
}
y: function(callbackFunc){
 //do some stuff
 //then execute callback function
 callbackFunc();
}

【问题讨论】:

  • 你实际上不能传递一个函数with参数,但是你可以传递一个函数和一个参数数组
  • @Jeremy 哦酷!我认为这可以工作!但是如何从内部引用函数本身呢?可以举个例子吗
  • 叫它this.x有什么问题?

标签: javascript function binding closures


【解决方案1】:

您可以将x定义为命名函数,在if条件处设置一个标志以确定是否传递x或调用x以防止递归调用yx;使用Function.prototype.bind()this 设置为当前或其他对象,在y 处替换标志,调用xy 以访问传递给x 的原始参数;可选地将附加参数传递给x

var obj = {
  z: true,
  x: function x(a, b, c) {
    if (this.z === true) {
      this.y(x.bind(this, arguments));
    } else {
      console.log(arguments, this)
    }
    //blah blah
  },
  y: function(callbackFunc) {
    //do some stuff
    //then execute callback function
    if (this.z) {
      this.z = false;
      // pass additional parameters to `x`
      callbackFunc("abc")
    };
  }
}

obj.x(1, 2, 3);

【讨论】:

    【解决方案2】:

    你可以试试

     x: function(a, b, c){
         if(certain conditions not met){
           this.y(this.x, a,b,c);
         }
         //blah blah
        }
        y: function(callbackFunc,a1,b1,c1){
         //do some stuff
         //then execute callback function
         callbackFunc(a1,b1,c1);
        }
    

    我写了a1,b1,c1只是为了区分,你可以使用a,b,c

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-02-22
      • 2011-06-30
      • 1970-01-01
      • 2019-11-01
      • 2016-04-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多