如何在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.owner
在tip()
,但我改变后,它工作正常:)
如果你想这样做
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()