You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何修改继承自内置Array的自定义类在浏览器控制台的打印类名

实现方案

底层逻辑说明

火狐等现代浏览器控制台对自定义类实例的类型展示前缀,不会读取普通的toString方法返回值,会优先读取实例的Symbol.toStringTag属性作为自定义类型标签。你之前修改Vector.constructor.prototype.toString的操作完全无效:Vector.constructor本质是内置的Function构造器,修改它的原型方法会污染全局所有函数的toString逻辑,和Vector实例的控制台展示规则没有关联。

可直接运行的代码

在Vector类中定义Symbol.toStringTag getter即可:

class Vector extends Array {
  constructor(array) {
    super(...array);
  }
  // 新增以下代码
  get [Symbol.toStringTag]() {
    return 'Vector';
  }
  // 其余业务代码
}

如果不想在类内部定义,也可以直接给原型赋值,效果一致:

Vector.prototype[Symbol.toStringTag] = 'Vector';

验证效果

实例化后在火狐控制台打印即可得到预期输出:

new Vector([1,2,3]) 
// 火狐控制台输出:Vector(3) [ 1, 2, 3 ]

Symbol.toStringTag是ES6标准定义的自定义类型标签属性,兼容所有主流现代浏览器,Chrome、Safari等其他浏览器也会遵循该规则展示自定义类的类型。

内容的提问来源于stack exchange,提问作者qwr

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 00:42:03