78

http://microjs.comを参照すると、「イベント エミッター」というラベルの付いたライブラリが多数表示されます。私は、Javascript 言語の基本についてかなりよく知っていると思いたいのですが、「イベント エミッター」が何なのか、何をするのか、まったくわかりません。

誰か教えてくれませんか?それは面白そう...

4

4 に答える 4

60

誰でも聞くことができるイベントをトリガーします。さまざまなライブラリがさまざまな目的でさまざまな実装を提供していますが、基本的な考え方は、イベントを発行してそれらをサブスクライブするためのフレームワークを提供することです。

jQuery の例:

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

// Emit event.
$('#foo').trigger('click');

ただし、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");
于 2012-11-18T09:32:01.187 に答える
21

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

これは、 のすべての基本機能を示していEventEmitterます。このon or addListenerメソッド (基本的にはサブスクリプション メソッド) を使用すると、監視するイベントと呼び出すコールバックを選択できます。一方emit、メソッド (publish メソッド) を使用すると、イベントを「発行」できます。これにより、イベントに登録されているすべてのコールバックが「起動」します (呼び出されます)。

ソースからイベントエミッターとは?

于 2012-11-18T09:29:24.027 に答える