我知道“this”是指使用“this”的函数的对象。那么在这种情况下,函数 (req, res) 中的“this”指的是哪个对象?
router.post('/upload', function(req, res, next) {
console.log(this);
console.log(dir);
...
}
最佳答案
这取决于 router.post()
调用回调的方式。首先要看的是文档。如果没有记录,请查看代码。一般来说,如果没有对 this
进行特殊处理,那么它会指向全局对象(如果在严格模式下,则指向 undefined)。
如果router.post()
是这样实现的:
router.post = function (route, callback) {
// ..
callback(a,b,c);
}
然后 this
将指向全局对象或 undefined 取决于天气与否你“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));
关于javascript - 'this'指的是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27008162/