花时间学习C等语言的JavaScript开发人员往往无法使用某些类型的自省,比如记录行号,以及当前方法的调用方法.如果您使用的是V8(Chrome,Node.js),那么您可以采用以下方法.

推荐答案

Object.defineProperty(global, '__stack', {
  get: function(){
    var orig = Error.prepareStackTrace;
    Error.prepareStackTrace = function(_, stack){ return stack; };
    var err = new Error;
    Error.captureStackTrace(err, arguments.callee);
    var stack = err.stack;
    Error.prepareStackTrace = orig;
    return stack;
  }
});

Object.defineProperty(global, '__line', {
  get: function(){
    return __stack[1].getLineNumber();
  }
});

console.log(__line);

以上将记录19.

再加上arguments.callee.caller,你可以更接近你在C中通过宏获得的有用日志(log)类型.

Node.js相关问答推荐

Mongoose:如何在文档中推送到Caped(有限大小,滚动窗口)数组?

mongoose 模型填充问题

在内存中加载安全密钥安全吗?还是每次都从文件中读取?

如何使用多个参数完成

创建查询以展开数组并筛选出具有特定值的元素之后的元素

如何在Node.js的telegraf.js命令中添加参数?

在生产环境中,Nest实例启动时抛出不完整的导入错误

加速 sequelize ORM 中的查询

Mocha调用所有it回调模拟(测试中间件)

如何在没有云功能的情况下使用 Google PubSub

mongoose.model() 方法返回未定义

从数据库读取数据并将其作为可下载的 zip 文件发送

GridFS 大文件下载使 Node.js 服务器崩溃. MongoServerError:排序超出了字节的内存限制

如何使用 Puppeteer 从输入中删除现有文本?

JSHint 是否支持异步/等待?

Node.JS 中的基本 HTTP 身份验证?

webpack css-loader 在外部样式表的 url() 引用中找不到图像

NodeJS 中的 HTTPS 请求

在 Node.js 中获取终端的宽度

NodeJS:如何调试检测到 EventEmitter 内存泄漏.添加了 11 个侦听器