什么是“事件发射器”?

浏览http://microjs.com ,我看到很多标有“事件发射器”的库。 我喜欢以为我知道我的JavaScript语言的基本方法很好,但我真的不知道“事件发射器”是什么或做什么。

任何人都在照顾我? 听起来很有趣…

它触发了任何人都可以听的事件 。 不同的库提供不同的实现和不同的目的,但基本的想法是提供一个发布事件和订阅的框架。

从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"); 

在node.js中,事件可以简单地描述为一个带有相应callback的string。 一个事件可以被多次“发射”(或者换句话说,相应的callback被调用),或者您可以select只在第一次发射时才听。

例:-

 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所有基本function。 on or addListener方法(基本上是订阅方法)允许您select要监视的事件和要调用的callback。 另一方面, emit方法(发布方法)允许您“发射”一个事件,这会导致注册到该事件的所有callback“激发”(被调用)。

从源头什么是事件发射器?

考虑一个callback函数 –

 function test(int a, function(){ console.log("I am call-back function"); }){ console.log("I am a parent function"); } 

现在,无论何时在一个事件(button点击或任何连接等)上调用父函数,它首先执行它的代码,然后控制传递给callback函数。 现在,一个事件发生器是一个对象/方法,一旦发生某个动作就触发一个事件,以便将该控制传递给父函数。 例如,服务器是Node.Js编程中的事件发射器。 只要服务器遇到错误,将错误传递给错误父函数,就会发出错误事件。 一旦套接字连接到服务器,服务器就会发出一个连接事件,然后这个事件触发getConnections的父function,这确实也把一个callback函数作为参数。 所以,它确实是一个链,它是由事件发生器发生的事件触发的,它发出一个事件来启动一个正在运行的函数。

node.js中的简单示例:

  var EventEmitter = require('events').EventEmitter; var concert = new EventEmitter; var singer = 'Coldplay'; concert.on('start', function (singer) { console.log(`OMG ${singer}!`); }); concert.on('finish', function () { console.log(`It was the best concert in my life...`); }); concert.emit('start', singer); concert.emit('finish');