用Javascript创建事件
Creating events in Javascript
如果我有一个作为事件订阅的函数列表,那么运行它们并使用.call()
(下面的B)或更直接(a)调用它们是否有优势?代码如下。我能看到的唯一区别是,.call
可以控制this
的设置。除此之外还有什么不同吗?
$(function() {
eventRaiser.subscribe(function() { alert("Hello"); });
eventRaiser.subscribe(function(dt) { alert(dt.toString()); });
eventRaiser.DoIt();
});
var eventRaiser = new (function() {
var events = [];
this.subscribe = function(func) {
events.push(func);
};
this.DoIt = function() {
var now = new Date();
alert("Doing Something Useful");
for (var i = 0; i < events.length; i++) {
events[i](now); //A
events[i].call(this, now); //B
}
};
})();
不,没有其他区别。如果遵循第二种方法,则可以扩展subscribe
,以便"客户机"可以指定要使用的上下文:
this.subscribe = function(func, context) {
events.push({func: func, context: context || this});
};
this.DoIt = function() {
var now = new Date();
alert("Doing Something Useful");
for (var i = 0; i < events.length; i++) {
events[i].func.call(events[i].context, now);
}
};
如果您决定使用方法B,您可以允许订阅事件的函数执行特定于事件的函数。
例如,您可以在函数中使用this.getDate()
(您必须创建该方法),而不是将日期作为参数传递。在Event类中另一个有用的方法是this.getTarget()
。
相关文章:
- 在创建对象后附加一个jquery事件
- 动态创建OnClick事件Javascript
- 谷歌地图动态创建的标记点击事件使用相同的标记
- 如何在javascript中创建自定义事件
- 在动态创建的标记上添加事件
- 有没有一种方法可以让内联事件处理程序在元素创建后立即执行
- 如何在Ol3弹出窗口中添加用javascript创建的按钮上的点击事件
- 如何在jQuery Mobile 1.4 Datepicker中创建事件
- 使用jQuery删除动态创建的元素上的mouseenter事件
- 如何使用我的Jquery代码创建委托事件侦听器
- 什么'是在HTML5画布中创建关键事件的最佳方式
- 如何在动态创建元素的内联onclick事件中传递对象
- 将Backbone.View重新注入DOM,保留事件而不是创建新事件
- 使用 noUiSlider 通过点击事件创建范围时出错
- 两个同步事件创建了一个无限循环
- 使用jQuery定义onInput事件创建元素
- 事件创建中的Javascript绑定对象
- 为已发出的事件创建侦听器时的闭包问题
- 如何为必应地图事件创建闭包
- 为事件创建单元测试