【问题标题】:JavaScript pre set function parameter [duplicate]JavaScript预设函数参数[重复]
【发布时间】:2016-12-22 07:58:16
【问题描述】:

我正在监听一系列事件(不是 DOM 事件),以及一个包含事件处理函数的对象。

通常我会做类似的事情

whenEventOccurs('event-name', handler.eventName)

除了我必须将参数传递给每个事件侦听器都会更改的处理程序。

我正在寻找像 Function.prototype.bind() 这样不设置 this 但设置第一个参数的东西,如果可能的话。

如果没有干净的解决方案,我总是可以执行以下操作,但如果可能的话,我想避免它:

whenEventOccurs('event-name', function(foo, bar, baz){
    handler.eventName(specialParam, foo, bar, baz);
});

【问题讨论】:

  • 你可以返回一个带有必要绑定的函数

标签: javascript partial-application


【解决方案1】:

您可以将其封装在一个与bind()类似的函数中

function bindArg1(func, arg1) {
    return function() {
        var args = [].slice.call(arguments);
        args.unshift(arg1);
        return func.apply(this, args);
    }
}

whenEventOccurs('event-name', bindArg1(handler.eventName, specialParam))

【讨论】:

  • 除特殊参数外,如何传递参数?
  • 另外,this 范围也无法使用,这意味着我无法在 handler 中引用其他内容
  • 如果要传递其他参数,只需使用您在问题中编写的代码即可。
  • bind1Arg.apply() 调用中传递this
  • 查看重复问题,了解如何绑定任意数量的参数,而不仅仅是第一个参数。
猜你喜欢
  • 2018-09-14
  • 2014-05-10
  • 1970-01-01
  • 2014-12-23
  • 2016-10-09
  • 2012-10-11
  • 2017-01-01
  • 2021-01-27
  • 2012-11-13
相关资源
最近更新 更多