Javascript node.js自定义事件:无法调用方法';发射';未定义的

Javascript node.js自定义事件:无法调用方法';发射';未定义的,javascript,node.js,events,Javascript,Node.js,Events,我正在学习node及其事件API,并尝试制作一个简单的示例 这是我的代码: var fs = require('fs'); var util = require('util'); var events = require('events'); var FileLoader = function () { events.EventEmitter.call(this); this.load = function (url) { fs.readFile(url, fun

我正在学习node及其事件API,并尝试制作一个简单的示例

这是我的代码:

var fs = require('fs');
var util = require('util');
var events = require('events');
var FileLoader = function () {
    events.EventEmitter.call(this);
    this.load = function (url) {
        fs.readFile(url, function (err, data) {
            if (err) {
                throw err;
             } else {
                this.emit('loaded', data.toString());
            }
        });
    };
};
util.inherits(FileLoader, events.EventEmitter);
module.exports = FileLoader;
我想
load()
一个文本文件,当它被加载时,用
.on('load',function(){…})
捕捉它,但是
这个
是未定义的,所以程序崩溃


我肯定遗漏了一些东西,如何让它工作?

这不是Node的问题,而是JavaScript的问题。
this.emit
中的
this
不是
FileLoader
实例

我建议您仔细阅读JavaScript中
this
的行为。这可能对你有帮助

在这种情况下,您需要在
readFile
回调中绑定
this
,以便通过将
.bind(this)
添加到回调中,内部
this
就是外部
this

this.load = function (url) {
    fs.readFile(url, function (err, data) {
        if (err) {
            throw err;
         } else {
            this.emit('loaded', data.toString());
        }
    }.bind(this));
};
我怀疑
this.emit
中的
this
不是
FileLoader
实例,需要一种方法将
this
传递到回调中<代码>绑定()是我一直在寻找的方式,谢谢。