繁体   English   中英

理解纯js事件函数

[英]understanding pure js Event function

我刚刚浏览了pace.js的源代码并遇到了以下函数,::

Evented.prototype.trigger = function() {
  var args, ctx, event, handler, i, once, _ref, _ref1, _results;
  event = arguments[0], args = 2 <= arguments.length ? __slice.call(arguments, 1) : [];
  if ((_ref = this.bindings) != null ? _ref[event] : void 0) {
    i = 0;
    _results = [];
    while (i < this.bindings[event].length) {
      _ref1 = this.bindings[event][i], handler = _ref1.handler, ctx = _ref1.ctx, once = _ref1.once;
      handler.apply(ctx != null ? ctx : this, args);
      if (once) {
        _results.push(this.bindings[event].splice(i, 1));
      } else {
        _results.push(i++);
      }
    }
    return _results;
  }
};

现在理解plain JS,对我来说有点挑战,不过还是把函数中用到的独立组件和方法都看完了,但是实在搞不懂这个函数在插件里到底是干什么的。

有人可以解释一下吗? 如果你能给我一个真实但一般的想法就足够了。

也可以独立于插件pace.js使用此功能吗? 我的插件pace.js 似乎是用纯js 写的。

编辑:如果有人可以评论每一行发生的事情,那将是非常友好的,如果您使用技术术语那很好。 稍后我可以参考 mdn 并了解一旦我知道每行上发生的事情模糊不清。 我了解 JS 方法以及与 Web API 相关的任何事情,MDN 有关于它的大量文档,但在我看到的任何地方都让我感到困惑的event

您正在查看的代码是编译后的咖啡脚本代码,查看原始代码更容易理解:

  trigger: (event, args...) ->
    if @bindings?[event]
      i = 0
      while i < @bindings[event].length
        {handler, ctx, once} = @bindings[event][i]

        handler.apply(ctx ? @, args)

        if once
          @bindings[event].splice i, 1
        else
          i++

源代码: https : //github.com/HubSpot/pace/blob/20a7a70028f51c5e511bcb98be5e116f577faa9f/pace.coffee#L164

它检查给定事件是否存在绑定,然后遍历所有现有绑定并调用该事件的处理程序。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM