[英]understanding pure js Event function
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.