首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >javascript:需要(‘events’).EventEmitter;

javascript:需要(‘events’).EventEmitter;
EN

Stack Overflow用户
提问于 2014-02-04 16:04:41
回答 2查看 3.8K关注 0票数 3

为什么

代码语言:javascript
复制
var EventEmitter = require('events').EventEmitter;
var channel = new EventEmitter();

很管用,但是

代码语言:javascript
复制
var EventEmitter = require('events');
var channel = new EventEmitter();

不管用!实际上,我有另外一个完全不同的例子,

代码语言:javascript
复制
var Currency = require('./currency)
var Cu = new Currency();

很管用,但是

代码语言:javascript
复制
var Currency = require('./currency).Currency;
var Cu = new Currency();

不管用。这是我的currency.js:

代码语言:javascript
复制
function Currency(canadianDollar) {
    this.canadianDollar = canadianDollar;
}

module.exports = Currency;

Currency.prototype.cal = function(amount) {
    return amount * this.canadianDollar;
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-02-04 16:10:05

因为这就是编写API的方式。"events“模块的简化示例如下:

代码语言:javascript
复制
module.exports = {
    EventEmitter: function () {
        // ...
    }
};

在上述情况下,require('events');将返回包含EventEmitterObject,但require('events').EventEmitter将返回您可能对实例化感兴趣的实际EventEmitter函数。

应该提到,API设计人员确实可以使用EventEmitter直接导出module.exports = function () { ... };函数,但是,他们决定为"events“模块的其他潜在有用属性留出空间。

编辑

关于module.exports = EventEmitter; in https://github.com/joyent/node/blob/master/lib/events.js,您可以在下面的行中找到:

代码语言:javascript
复制
// Backwards-compat with node 0.10.x
EventEmitter.EventEmitter = EventEmitter;

我认为,从0.11版本开始,您可以运行var Emitter = require('events');,但在0.10.x中,您只能使用require('events').EventEmitter

票数 7
EN

Stack Overflow用户

发布于 2014-02-04 16:13:20

require准确地返回您在module.exports对象中放置的内容。因此,如果您有module.exports = Currency;,那么require返回Currency,如果有exports.Currency = Currencyrequire将返回{ Currency : Currency }对象。

如果您希望这两种方式都能工作,只需执行Currency.Currency = Currency; module.exports = Currency即可。在最新的节点发布中,他们对EventEmitter也是这样做的

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21557369

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档