怎样在控制台将JS class实例输出为JSON格式
admin
2023-02-13 15:00:08
0

有一个类:

class Point {
  constructor(x, y) {
    this.x = x;
    this.y = y;
  }
}

如果我们在控制台中输出其实例:

console.log(new Point(10, 20));

控制台中的输出结果为:

Point { x: 10, y: 20 }

那如何只输出JSON格式,不输出类名”Point”呢?
有的同学可能会使用如下的方法:

console.log(JSON.stringify(new Point(10, 20)))

这种方法当然是可以的,其输出结果如下:

{"x":10,"y":20}

但我们每次输出的时候,都需要调用一次JSON.stringify,显得有些啰嗦。
有没有一种更简洁的办法呢?
答案是肯定的。
实际上,如果你使用的是nodejs,console.log输出类对象时,是调用的inspect函数来序列化并打印输出对象的。
而在node中有一种自定义对象inspection函数的办法。
在6.6.0以上版本中,你可以重写类的[util.inspect.custom](depth, options)函数。

const util = require('util');

class Point {
  constructor(x, y) {
    this.x = x;
    this.y = y;
  }

  toString() {
    const that = this;
    return JSON.stringify(that);
  }

  [util.inspect.custom](depth, options) {
    return this.toString()
  }
}

8.x版本的文档说明:https://nodejs.org/docs/latest-v8.x/api/util.html
在node v10.12.0以上版本中,使用了Symbol,并可以重写[inspect]()函数。

const inspect = Symbol.for('nodejs.util.inspect.custom');

class Point {
  constructor(x, y) {
    this.x = x;
    this.y = y;
  }

  toString() {
    const that = this;
    return JSON.stringify(that);
  }

  [inspect]() {
    return this.toString()
  }
}

console.log(new Point(10, 20));

相关内容

热门资讯

山西发布山洪蓝色预警,涉8市4... 2026年7月24日下午,山西省水利厅和山西省气象局联合发布山洪灾害气象风险预警,预计未来12小时,...
中央决定:华润集团董事长调整 2026年7月23日,华润(集团)有限公司召开中层以上管理人员大会。中央组织部有关负责同志宣布了党中...
学习笔记丨“努力让每个孩子都能... 制作:王宇峰 岳小乔 贾雪
活力中国调研行丨一束“光”的故... 它被称为“最快的刀”“最准的尺”“最亮的光”。从一束“光”到一颗“芯”,再到规模千亿的产业集群,今天...
携手前沿技术 共创智能未来 携手前沿技术 共创智能未来 ——来自2026年世界互联网大会数字丝路发展论坛的声音 夏日长安,秦岭叠...
上海浩劢取得桌面式轻型悬臂吊专... 国家知识产权局信息显示,上海浩劢工业科技有限公司取得一项名为“桌面式轻型悬臂吊”的专利,授权公告号C...
毒油风暴未歇民进党却急着上架,... 海峡导报综合报道 岛内毒油食安风暴持续延烧,台北市长蒋万安持续号召民众7·25上凯道,但“食药署”2...
WAIC挤满“卖铲人”,但算力... 2026年的WAIC,机器人依然抢占了绝大多数镜头。但展馆里数量增长最快的,是自称“AI Infra...
对话芯展速许玮:“内存墙”下,... Token经济时代,衡量AI价值的标准,正从模型能力转向Token生产效率。AI因此从工具演变为新的...
菲尔兹奖得主邓煜写过这些诗词 邓煜 李少君 徐俪成 | 澎湃新闻记者 徐萧 整理北京时间7月23日晚,中国数学家王虹、邓煜获颁菲尔...