节点util.inherits和这个问题
我正试图解决一个节点服务器中的“这个问题”。 如果我不使用worker.stuff.bind(worker)
replace下面的worker.stuff
,它不起作用。
有没有办法在工人类本身添加bind
? 每次我使用它的function都很无聊。
这是服务器:
var app = require("express")() , Worker = require('./worker') , worker = new Worker(); app.get("/stuff", worker.stuff); worker.on('done', function () { console.log('done') }); app.listen(3000);
这是工人:
function Worker(options) {} require('util').inherits(Worker, require('events').EventEmitter); Worker.prototype.stuff = function (req, res) { this.emit('done'); res.send(); } module.exports = Worker;
这是我能想到的最好的:
function Worker(options) { var self = this; this.stuff = function (req, res) { self.emit('done'); res.send(); } } require('util').inherits(Worker, require('events').EventEmitter); module.exports = Worker;
在构造函数中定义所有的方法,并引用闭包的self
而不是this
。
我可能咬了子弹,并根据需要使用bind
。