javascript - 'this'指的是什么?

标签 javascript node.js scope this

我知道“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/

相关文章:

node.js - 找不到模块 : Can't resolve './aws-exports'

node.js - 如何以 root 身份访问 Bluemix 应用程序的运行时 shell?

javascript - Karma 测试未完成

javascript - 我如何使用谷歌应用程序脚本来修改我从谷歌分析中提取的数据?

javascript - 如何从 CycleJS 中的 POST 请求获取文件

node.js - 时间住mongodb,mongoose不行。文档不会被删除

python - 辅助函数与主函数同名吗?

spring - 如何忽略自定义 Spring 租户

python - Python 类中的作用域

javascript - jQuery 代码省略 iframe 源的顶部和底部部分