gpt4 book ai didi

javascript - 尝试打印对象时调用 toString

转载 作者:行者123 更新时间:2023-12-01 02:43:01 25 4
gpt4 key购买 nike

当我们尝试使用 console.log 语句或 alert 打印对象时,我试图模仿 Java 的行为来调用 toString() 方法

目前,我已经尝试过类似的东西

class Some {
constructor(array = []) {
this.pvtData = array;
}

toString = () => JSON.stringify(this.pvtData);
}

const s = new Some([1, 2, 3]);
console.log(s);

预期的输出应该是

[1,2,3]

但是,我得到的输出是

{
"toString": () => JSON.stringify(this.pvtData),
"pvtData": [
1,
2,
3
]
}

任何人都可以帮助我解决问题并获得所需的输出吗?

注意:
我不想使用 console.log(s.toString());。基本上,console.log 语句不应更改。

最佳答案

你所做的将对 alert 有效,因为 alert 将其参数转换为字符串,但对大多数控制台的 console.log 无效,因为它们不转换为字符串,所以它们会尝试向您展示对象的表示形式。

console.log 没有跨环境的等效方法。¹如果您希望 console.log 发生这种情况,您必须覆盖它:

const oldLog = console.log.bind(console);
console.log = (...args) => oldLog(...args.map(String));

实例:

class Some {
constructor(array = []) {
this.pvtData = array;
}

toString = () => JSON.stringify(this.pvtData);
}

const oldLog = console.log.bind(console);
console.log = (...args) => oldLog(...args.map(String));
const s = new Some([1, 2, 3]);
console.log(s);

显然,不要在其他人将要使用的通用库中这样做。不过,在您自己的应用程序或页面中没问题。

或者更好的是,只使用您自己的日志记录函数来代替包装 console.log:

// The log function
const log = (...args) => console.log(...args.map(String));

// Usage
class Some {
constructor(array = []) {
this.pvtData = array;
}

toString = () => JSON.stringify(this.pvtData);
}
const s = new Some([1, 2, 3]);
log(s);


¹ 在 Node.js 中,控制台过去常常寻找一种名为 inspect 的方法,但他们不久前就不再这样做了。


旁注:通常没有理由使 toString 成为箭头函数。它有效(在支持 class fields proposal 的环境中),但通常是不必要的。把它变成一个方法:

class Some {
constructor(array = []) {
this.pvtData = array;
}

toString() {
return JSON.stringify(this.pvtData);
}
}

关于javascript - 尝试打印对象时调用 toString,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59782798/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com