【问题标题】:Can you access `this` using the built-in NodeJS debugger?你可以使用内置的 NodeJS 调试器访问 `this` 吗?
【发布时间】:2013-08-06 11:39:26
【问题描述】:

我正在使用http://nodejs.org/api/debugger.html

我在方法中放了一个断点:

Processor.prototype.myMethod = function() {
  console.log(this.constructor.name);  // returns Processor

  debugger;

  this.otherMethod(123);
}

然后我调用node debug myapp.js 并到达断点。但是当我输入this.constructor.name 时,我得到的是“对象”,而不是“处理器”。

我可以访问该范围内的this 还是必须使用https://github.com/node-inspector/node-inspector 之类的东西?

编辑:我似乎无法从调试器访问任何脚本变量,甚至无法访问 Processor。我在 OS X 上使用 v0.10.13。

【问题讨论】:

  • 解决方法可能是var self = this,然后在调试器中访问self
  • @ThiefMaster 这似乎不起作用:ReferenceError: self is not defined
  • 行不通。这样做只有在深入到同一个函数作用域时才有用,这似乎不是因为他使用prototype 来创建类。
  • 我的意思是把它放在你的代码中 debugger 语句之前。
  • @ThiefMaster 是的,这就是我所做的,这就是我得到的错误。

标签: node.js


【解决方案1】:

是的,您可以访问其中的值,以及可以从调试器停止的范围访问的任何其他值,但您应该启动调试器 repl,在同一个调试器中键入该命令,然后在此处键入您想观看的值 (this.constructor.name)。

要离开调试器的repl,请按ctrl + c,您将返回调试器提示符。

提醒您,如果构造函数是命名函数,则构造函数将具有名称,否则将为空字符串,例如 var Processor = function Processor() {}; 而不是 var Processor = function () {};

【讨论】:

  • 谢谢!我想我错过了文档中的repl 命令,因为我希望它可以立即工作。不过,我明白为什么这可能不是一个好主意。
猜你喜欢
  • 2023-04-04
  • 2016-12-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-05-15
  • 2011-07-30
  • 1970-01-01
  • 2012-05-20
相关资源
最近更新 更多