什么是"事件发射器"?

wwa*_*waw 70 javascript events event-handling javascript-events

通过http://microjs.com浏览,我看到许多标记为"事件发射器"的库.我喜欢认为我很熟悉javascript语言的基础知识,但我真的不知道"事件发射器"是什么或者做什么.

有人关心开导我吗?听起来很有趣...

nia*_*her 56

它会触发任何人都可以收听的事件.不同的库提供不同的实现并用于不同的目的,但基本思想是提供发布事件和订阅它们的框架.

jQuery的例子:

// Subscribe to event.
$('#foo').bind('click', function() {
    alert("Click!");
});

// Emit event.
$('#foo').trigger('click');
Run Code Online (Sandbox Code Playgroud)

但是,使用jQuery为了发出事件,您需要拥有一个DOM对象,并且不能从任意对象发出事件.这是事件发射器变得有用的地方.这里有一些用于演示自定义事件的伪代码(与上面完全相同的模式):

// Create custom object which "inherits" from emitter. Keyword "extend" is just a pseudo-code.
var myCustomObject = {};
extend(myCustomObject , EventEmitter);

// Subscribe to event.
myCustomObject.on("somethingHappened", function() { 
    alert("something happened!");
});

// Emit event.
myCustomObject.emit("somethingHappened");
Run Code Online (Sandbox Code Playgroud)

  • 你的最后一段是错误的,jQuery*支持自定义事件和声明.示例:http://jsfiddle.net/PzRtn/ (12认同)
  • 使用$({})jQuery可以在没有DOM元素的情况下执行事件 (4认同)
  • @Jack http://stackoverflow.com/questions/1553342/custom-event-in-jquery-that-isnt-bound-to-a-dom-element#comment1417316_1556914 (2认同)

Rah*_*thi 20

在node.js中,事件可以简单地描述为具有相应回调的字符串.事件可以被"发出"(或者换句话说,相应的回调被调用)多次,或者您可以选择仅在第一次发出事件时进行侦听.

例:-

var example_emitter = new (require('events').EventEmitter);
example_emitter.on("test", function () { console.log("test"); });
example_emitter.on("print", function (message) { console.log(message); });
example_emitter.emit("test");
example_emitter.emit("print", "message");
example_emitter.emit("unhandled");

> var example_emitter = new (require('events').EventEmitter);
{}
> example_emitter.on("test", function () { console.log("test"); });
{ _events: { test: [Function] } }
> example_emitter.on("print", function (message) { console.log(message); });
{ _events: { test: [Function], print: [Function] } }
> example_emitter.emit("test");
test //console.log'd
true //return value
> example_emitter.emit("print", "message");
message //console.log'd
true    //return value
> example_emitter.emit("unhandled");
false   //return value
Run Code Online (Sandbox Code Playgroud)

这展示了一个的所有基本功能EventEmitter.该on or addListener方法(基本上是订阅方法)允许您选择要监视的事件和要调用的回调.emit另一方面,该方法(发布方法)允许您"发出"一个事件,这会导致注册到事件的所有回调都"触发"(被调用).

来自什么是事件发射器?