nodejs从模块中的对象内部调用函数

时间:2014-01-07 09:46:25

标签: node.js function object

我有以下模块:

var util = require('util');
var events = require('events');
exports.IncomingMessage=IncomingMessage;

var IncomingMessage = function (){
    events.EventEmitter.call(this);
    this.headers={};
    this.httpVersion='';
    this.method='';
    this.socket='';
    this.ready=function(){
        console.log('should emit ready');
        //this.emit('ready');
    }

}

在我的代码中,我正在做:

var req=require('./newIncomingMessage');

然后当我打电话时:

req.ready();

我收到错误:

TypeError : Object #<Object> has no method 'ready'

为什么?我错过了什么?

3 个答案:

答案 0 :(得分:1)

你错过了module.exports = ...来说出你需要的时候会发生什么。如果您希望它导出具有.ready功能的对象,则仍需要

....
module.exports = { ready: function() { ... } };

说,我看不到你的模块中看起来像一个就绪函数的代码,所以更好的问题是“你要用这个代码做什么”。

相对重要的一点:req是一个通常为http请求对象保留的var名称(在plain nodejs或connect / express中),所以你要通过使用它来混淆很多其他Node devs作为你的变量名。

答案 1 :(得分:0)

只是在定义之前没有识别IncomingMessage。

var util = require('util');
var events = require('events');
exports.IncomingMessage = new function(){
  events.EventEmitter.call(this);
  this.headers={};
  this.httpVersion='';
  this.method='';
  this.socket='';
  this.ready=function(){
    console.log('should emit ready');
    //this.emit('ready');
  };
};

在使用之前

var iMsg=require('./newIncomingMessage').IncomingMessage;

然后你可以使用它:

iMsg.ready();

关于它的简要说明是:

  

您可以将新function(){}视为{},但超过{},因为您可以在此封闭范围内执行更多操作。

     

在这个例子中,只是错字

     
    

typeof iMsg

  
     

你会得到一个

     
    

'object'

  

答案 2 :(得分:0)

好吧,我无法从上面的答案中理解为什么这种方法不起作用。但那是我最后用的:

module.exports = IncomingMessage;

function IncomingMessage() {
    this.headers={};
        this.httpVersion='';
        this.method='';
        this.socket='';
    }
IncomingMessage.prototype.ready=function(){
    console.log('Inside ready function');
}