如何在node.js中导出添加了原型方法的对象

我有一个文件中的对象,并希望能够要求该文件,然后创build对象的新实例,但我碰到了一个障碍。 这似乎是非常基本的,我错过了什么。

hat.js

function Hat(owner) { this.owner = owner; } Hat.prototype.tip = function() { console.log("and he (" + owner + ") tipped his hat, just like this"); } exports.Hat = Hat; 

节点terminal

尝试1

 > require('./hat.js'); > var mighty_duck = new Hat('Emilio'); ReferenceError: Hat is not defined 

尝试2

 > var Hat = require('./hat.js'); > var mighty_duck = new Hat('Emilio'); { owner: 'Emilio' } > mighty_duck.tip(); TypeError: Object #<Hat> has no method 'tip' 

编辑

我最遗憾的是遗漏了最大的问题。 我正在尝试使用的事实

 util.inherits(Hat, EventEmitter); 

所以我的hat.js实际上是

 function Hat(owner) { this.owner = owner; } Hat.prototype.tip = function() { console.log("and he (" + owner + ") tipped his hat, just like this"); } util.inherits(Hat, EventEmitter); exports.Hat = Hat; 

这是一个问题,因为开始扩展原型之前显然重要的是要inherits调用。 修复很简单,将inherits调用移动几行

 function Hat(owner) { this.owner = owner; } util.inherits(Hat, EventEmitter); Hat.prototype.tip = function() { console.log("and he (" + owner + ") tipped his hat, just like this"); } exports.Hat = Hat; 

你正在做你的要求错误的:

 var Hat = require('./hat.js').Hat; 

是你想要的。 当你做exports.Hat = Hat; 你正在输出一个对象( exports )与Hat propery。 所以当你需要'./hat.js'你得到了这个对象,并且需要访问Hat属性。

从节点repl:

 > require('./hat.js'); { Hat: [Function: Hat] } > require('./hat.js').Hat; [Function: Hat] > var Hat = require('./hat.js').Hat; undefined > var mighty_duck = new Hat('Emilio'); undefined > mighty_duck.tip(); and he (Emilio) tipped his hat, just like this 

当然,这是因为你说的owner而不是this.ownertip() ,但我改变后,它工作正常:)

如果你想这样做

 var Hat = require('./hat.js'), hat = new Hat('Emilio'); 

然后将您的导出更改为:

 module.exports = exports = Hat; 

它的工作原理:

 > require('./hat.js'); [Function: Hat] > var Hat = require('./hat.js'); undefined > var hat = new Hat('Emilio'); undefined > hat.tip(); and he (Emilio) tipped his hat, just like this 

编辑清理并从EventEmitterinheritance:

 var util = require('util'), events = require('events'); var Hat = exports.Hat = function(owner) { events.EventEmitter.call(this); this.owner = owner; } util.inherits(Hat, events.EventEmitter); Hat.prototype.tip = function() { console.log("and he (" + this.owner + ") tipped his hat, just like this"); } 

看看这里: http : //openmymind.net/2012/2/3/Node-Require-and-Exports/

你可以试试这个:

 function Hat(owner) { this.owner = owner; } Hat.prototype.tip = function() { console.log("and he (" + this.owner + ") tipped his hat, just like this"); } module.exports = Hat; 

然后, 喜欢这个:

 var hat = require('./hat.js'); var mighty_duck = new hat('Emilio'); mighty_duck.tip()