理解纯js事件功能

时间:2015-06-14 12:19:11

标签: javascript

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

in

现在理解普通JS对我来说是一个挑战,但我仍然经历了函数中使用的独立组件和方法,但我真的无法弄清楚这个函数在插件中做了什么。

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

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

编辑:如果有人可以评论每条线路上发生的事情,那将是非常友好的,如果你使用的技术术语很好。我可以稍后参考mdn并了解一旦我知道每条线路上都隐约发生了什么。我理解JS方法以及与Web API有关的任何内容,MDN都有很好的文档,但我看到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; } }; 的所有地方都让我感到困惑。

1 个答案:

答案 0 :(得分:1)

您正在查看的代码是编译的coffeescript代码,查看原始代码可以更容易理解:

  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++

Src:http://answers.unity3d.com/questions/133373/moving-object-in-a-ellipse-motion.html

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