如何控制继承String类的对象在console.log中的输出?
如何让自定义String子类实例被console.log时仅输出原始字符串
你的问题在于自定义的betterString是String的子类实例,本质是一个包装对象而非原始字符串,console.log默认会输出对象的完整结构信息。以下是几种解决方式:
方法一:重写 [Symbol.toPrimitive] 方法
该方法会在对象需要转换为原始值时触发,让console.log获取到原始字符串:
class betterString extends String { constructor() { super("Test") this.RealString = "test 2" } func() { return "Useless Value" } [Symbol.toPrimitive](hint) { return String(this); } }
初始化后直接console.log(new betterString())就会输出Test。
方法二:重写 inspect 方法(仅Node.js环境)
Node.js中console.log依赖util.inspect处理对象,重写对应的自定义方法即可:
const util = require('util'); class betterString extends String { constructor() { super("Test") this.RealString = "test 2" } func() { return "Useless Value" } [util.inspect.custom]() { return String(this); } }
方法三:调用时手动转换(无需修改类)
如果不想改动类的定义,在输出时手动将实例转为原始字符串即可:
const myStr = new betterString(); console.log(String(myStr)); // 输出 "Test"
内容的提问来源于stack exchange,提问作者MrShoe
相关产品推荐
相关产品推荐

