Node.js 中 this 指向详解:全局、函数与构造函数

作者:慢半拍时间:2026-10-29 23:57:11浏览:210

本文深入解析 Node.js 环境中 this 关键字的指向规则。区别于浏览器环境,Node.js 全局上下文中的 this 指向 module.exports;普通函数调用时 this 指向 global 对象;而在构造函数中,this 则指向新创建的实例。通过代码示例阐明不同场景下的变量归属与作用域关系。

Node.js 中 this 指向概述

以下内容均针对 Node.js 环境下的 this 关键字进行阐述,其机制与浏览器环境中的 JavaScript this 存在显著差异。

全局上下文中的 this

全局上下文中的 this


console.log(this); {}
this.num = 10;
console.log(this.num); 10
console.log(global.num); undefined

在全局作用域中,this 默认表现为一个空对象。值得注意的是,全局上下文中的 this 与 global 对象并无直接关联,具体指向需结合下文分析。

函数作用域中的 this

函数作用域中的 this


function fn(){
  this.num = 10;
}
fn();
console.log(this); {}
console.log(this.num); undefined
console.log(global.num); 10

在普通函数内部,this 指向 global 对象。这与全局上下文中的 this 并非同一对象。简而言之,在函数内部通过 this 定义的变量,实质上是为 global 对象添加了一个属性,此时该行为与全局上下文中的 this 已无关联。

若对此存疑,可通过以下代码验证。


function fn(){
  function fn2(){
    this.age = 18;
  }
  fn2();
  console.log(this); global
  console.log(this.age); 18
  console.log(global.age); 18
}
fn();

由此可见,在普通函数中,this 确实指向 global 对象。

构造函数中的 this

构造函数中的 this


function Fn(){
  this.num = 998;
}
var fn = new Fn();
console.log(fn.num); 998
console.log(global.num); undefined

在构造函数内部,this 指向当前创建的实例对象,而非 global 对象。

全局 this 与 module.exports 的关系

接下来探讨全局上下文中的 this。这实际上与 Node.js 的作用域机制密切相关。如需深入了解 Node.js 作用域,可参考探讨 Node.js 中的作用域问题一文。

回归主题,全局上下文中的 this 指向 module.exports。


this.num = 10;
console.log(module.exports); {num:10}
console.log(module.exports.num);

至于为何全局上下文中的 this 会指向 module.exports,需进一步掌握 module.exports 的相关知识。此处暂作了解,后续有机会再深入探讨 module 相关机制。

作者最新文章