在原型方法中使用“this”时丢失的上下文

好的,所以我有一个使用快递的节点应用程序。 在这个应用程序中,我有一个像这样的快速路线:

var MyObj = require('./myObj') , myObj = new MyObj(); app.post('/api/blah', auth.requiresLogin, myObj.method2); 

现在在MyObj对象中,我有以下几点:

 var MyObj = function(name){ this.name = name; this.message = 'hello'; }; MyObj.prototype = { method1: function(req, res, done){ console.log('In Method 1'); done(null, this.message +' '+this.name); }, method2: function(req, res){ var message; console.log('In Method 2'); this.method1(req, res, function(err, value){ if(err) throw err; message = value; console.log(this.message); }); return message; } }; module.exports = MyObj; 

现在,如果我不需要这个对象,并从同一个文件中调用它的作品。 正如这个jsFiddle所示: http : //jsfiddle.net/britztopher/qCZ2T/ 。 但是,如果我需要它,用新的构造,并尝试调用myObj.method2(req, res); 从需求类我得到#<Object> has no method 'method1' 。 不知道我在这里做错了什么,或者如果它expressJS或要求JS给我的问题。 另外,当我在method2中查看时,它是this = global ,所以有些东西正在丢失这个上下文。

当将myObj.method2方法作为parameter passing给app.post您并不知道应该执行哪个上下文/作用域。 因此它将在全球范围内执行。 解决scheme应该是myObj.method2.bind(myObj)