什么是'这个'指的是什么?

时间:2014-11-19 02:58:01

标签: javascript node.js scope this

我知道'this'是指使用'this'的函数的对象。那么在这种情况下,函数(req,res)中的哪个对象'this'指的是?

router.post('/upload', function(req, res, next) {
  console.log(this);
  console.log(dir);
  ...
}

2 个答案:

答案 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