无法实例化导出的自定义模块Nodejs的实例,它扩展了EventEmitter

时间:2015-06-06 16:44:48

标签: node.js class instantiation extend eventemitter

社区。 我无法实例化导出的自定义模块Nodejs的实例。

我有2个文件:一个自定义测试模块“resource.js”和“ext-emitter.js”

在resource.js中创建Resource类并从EventEmitter类扩展它。

    // resource.js
    var util = require("util");
    var eventEmitterInstance = require("events").EventEmitter;


function Resource(m){
    this.maxEvents = m;
    var self = this;

    process.nextTick(function() {
       var count = 0;
       self.emit('start');
       var t = setInterval(function(){
          self.emit('data', ++count);
          if (count === m) {
              self.emit('end', count);
              clearInterval(t);
          }

       }, 10);
    });

}

util.inherits(Resource, eventEmitterInstance);
module.exports = Resource();

然后我在下一个文件ext-emitter.js中导入上面的模块 我尝试实例化扩展自定义模块Resource()(它反过来扩展了EventEmitter类),但是我收到了一个错误:  “'资源'未定义”

请帮我找到我出错的地方。

var r = require("./resource");

var r = new Resource(7);

r.on('start', function(){
    console.log("I've started the resource getting process!!!");
});

r.on('data', function(d) {
    console.log("I received this data --> " + d );
});

r.on('end', function(finalCountOfRes){
   console.log("I have finished resource getting. The num of res gotten: " + finalCountOfRes); 
});

1 个答案:

答案 0 :(得分:1)

我认为你出错的地方是文件中的第一行" ext-emitter.js" 要小心点,你可以自己发现错误: 在这里,您需要自定义模块" resource.js"并将其放置到变量" r",然后您使用相同的变量" r"来实例化导入模块的新实例。并在ext-emitter.js Resource()对象中调用new / unknown。

var r = require("./resource");
var r = new Resource(7);

请密切关注var名称。 改变第一行:

var Resource = require("./resource");

它会正常工作。