为什么
var EventEmitter = require('events').EventEmitter;
var channel = new EventEmitter();很管用,但是
var EventEmitter = require('events');
var channel = new EventEmitter();不管用!实际上,我有另外一个完全不同的例子,
var Currency = require('./currency)
var Cu = new Currency();很管用,但是
var Currency = require('./currency).Currency;
var Cu = new Currency();不管用。这是我的currency.js:
function Currency(canadianDollar) {
this.canadianDollar = canadianDollar;
}
module.exports = Currency;
Currency.prototype.cal = function(amount) {
return amount * this.canadianDollar;
}发布于 2014-02-04 16:10:05
因为这就是编写API的方式。"events“模块的简化示例如下:
module.exports = {
EventEmitter: function () {
// ...
}
};在上述情况下,require('events');将返回包含EventEmitter的Object,但require('events').EventEmitter将返回您可能对实例化感兴趣的实际EventEmitter函数。
应该提到,API设计人员确实可以使用EventEmitter直接导出module.exports = function () { ... };函数,但是,他们决定为"events“模块的其他潜在有用属性留出空间。
编辑
关于module.exports = EventEmitter; in https://github.com/joyent/node/blob/master/lib/events.js,您可以在下面的行中找到:
// Backwards-compat with node 0.10.x
EventEmitter.EventEmitter = EventEmitter;我认为,从0.11版本开始,您可以运行var Emitter = require('events');,但在0.10.x中,您只能使用require('events').EventEmitter。
发布于 2014-02-04 16:13:20
require准确地返回您在module.exports对象中放置的内容。因此,如果您有module.exports = Currency;,那么require返回Currency,如果有exports.Currency = Currency,require将返回{ Currency : Currency }对象。
如果您希望这两种方式都能工作,只需执行Currency.Currency = Currency; module.exports = Currency即可。在最新的节点发布中,他们对EventEmitter也是这样做的
https://stackoverflow.com/questions/21557369
复制相似问题