这取决于router.post() 如何调用回调。首先要看的是文档。如果没有记录,请查看代码。一般来说,可以假设如果没有对this 进行特殊处理,则它指向全局对象(如果处于严格模式,则为未定义)。
如果router.post() 是这样实现的:
router.post = function (route, callback) {
// ..
callback(a,b,c);
}
然后this 将指向全局对象或未定义,具体取决于天气与否"use strict"。
但是router.post()也可以这样实现:
router.post = function (route, callback) {
// ..
callback.call(something,a,b,c);
}
在这种情况下,this 将指向 something 是什么。
或者也可以这样实现:
router.post = function (route, callback) {
// ..
var foo = {
a : callback
}
a(a,b,c);
}
在这种情况下,this 将指向 foo 对象。
如您所见,在 javascript 中,调用者确定 this 的值。
查看我对这个相关问题的回答以了解 this 在 javascript 中的行为:How does the "this" keyword in Javascript act within an object literal?
补充答案:
如果您阅读了上面的链接,那么您也会意识到您可以使用 bind 或闭包强制 this 成为您想要的任何东西:
router.post('/upload', (function(req, res, next){
console.log(this); // prints whatever myThis below points to
console.log(dir);
}).bind(myThis));