在严格模式下自身引用绑定函数

时间:2018-03-23 20:31:57

标签: javascript bind

我需要有一个绑定事件监听器函数来引用它自己,但是我没有看到以严格模式访问自身的方法(arguments.callee不可用)。

请参阅以下代码段以获取示例:

function callback(boundParam, event) {
  // This does not work here as not 'callback' was added
  // to the event bus but 'boundCallback'
  eventBus.removeListener(callback);   
}

function foo () {
  const boundCallback = callback.bind({}, 7);
  eventButs.addListener(boundCallback);
}

我有什么选择?

这是 NOT JavaScript: remove event listener的副本,因为我需要引用绑定函数!

2 个答案:

答案 0 :(得分:1)

也许内联处理程序,这样你就不需要绑定:

function foo () {
  function callback (){
    //...
    eventBus.removeListener(callback);
  }
  eventBus.addListener(callback);
}

答案 1 :(得分:1)

您可以创建一个函数,在调用时返回对绑定函数的引用。让我们调用该函数getBoundCallback。然后,将其附加到bind()调用的参数列表,以便在callback中接收函数。然后,您应该能够调用getBoundCallback并获取实际绑定函数:

function callback(boundParam, getBoundCallback, event) {
    eventBus.removeListener(getBoundCallback());
}

function foo() {
    let boundCallback;
    const getBoundCallback = () => boundCallback;
    boundCallback = callback.bind({}, 7, getBoundCallback);
    eventButs.addListener(boundCallback);
}

请注意boundCallback的声明和初始化是如何分开的,因为初始化getBoundCallback的语句需要引用boundCallback