我知道'this'是指使用'this'的函数的对象。那么在这种情况下,函数(req,res)中的哪个对象'this'指的是?
router.post('/upload', function(req, res, next) {
console.log(this);
console.log(dir);
...
}
答案 0 :(得分:3)
这取决于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?
如果你已经阅读了上面的链接,那么你也会意识到你可以强迫this
成为你希望它使用bind
或闭包的任何东西:
router.post('/upload', (function(req, res, next){
console.log(this); // prints whatever myThis below points to
console.log(dir);
}).bind(myThis));
答案 1 :(得分:0)
根据doc,这是指对象的所有者。 在您的情况下,函数的所有者应该在router.post(如果有的话)中定义
//Definition of router.post
router.post = function(string, block) {
block(x,y,z);
}
在这种情况下,这应该没有所有者? 通常当我使用“this”时,我需要使用关键字“new”
function Foo()
{
this.a = 1;
}
var foo = new Foo();
console.log(foo.a); // 1