ES6类构造函数不在nodejs 4.4.5LTS中工作

时间:2016-06-11 21:46:36

标签: javascript node.js ecmascript-6

我正在尝试编写一个虚假的下载器,它基本上会睡一段时间并发出'下载'事件。我还希望有我自己的变量来跟踪发出的事件数量。 这段代码抛出以下错误:

<

代码:

ReferenceError: this is not defined

如果我评论 this.totalEmitted ,那么它可以正常工作。

更新

当我完全消除构造函数时,它开始正常工作。

即使使用空构造函数也会导致此参考错误。

我不确定节点4.4.5中是否支持构造函数。

解决方法:

'use strict';
const EventEmitter = require('events');

class Downloader extends EventEmitter{
    constructor(){
        this.totalEmitted = 0;
    }
    download(delaySecs){
        setTimeout(() => {
            this.emit('downloaded',delaySecs);
            this.totalEmitted ++;
        },delaySecs*1000)
    }
}

module.exports = Downloader;

1 个答案:

答案 0 :(得分:0)

如果它没有打扰你从ES6 Class切换到函数,那么你可以尝试:

'use strict';
const util = require('util');
const EventEmitter = require('events');

function Downloader() {
  var self = this;

  self.totalEmitted = 0;

  this.on('downloaded', function() {
    self.totalEmitted ++;
    console.log(self.totalEmitted);
  });
}

util.inherits(Downloader, EventEmitter);

Downloader.prototype.download = function(delaySecs) {
  setTimeout(() => {
      this.emit('downloaded', delaySecs);
  }, delaySecs*1000);
};

var downloader = new Downloader();
downloader.download(1);

module.exports = Downloader;