gpt4 book ai didi

scala.js - 如何覆盖 JS 对象的 toString() 方法以使用 JSON.stringify()?

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

我厌倦了写 blah: "${JSON.stringify(target)}" 当我处理我的 DTO 对象时,我只想写 blah: "$target ".

我的 DTO 看起来像:

@js.native
trait AuthConnectionDetails extends js.Object {
def clientId: String = js.native
def accountHostname: String = js.native
}

这些 DTO 用于解析某些 REST API 调用的内容,例如:

val response = js.JSON.parse(xmlHttpRequest.responseText).
asInstanceOf[AuthConnectionDetails]

我不介意更改我定义 DTO 对象的方式来执行此操作(也许我应该为我的 DTO 或其他东西使用案例类,而不是原生 js 特征?),但我不知道该怎么做

我尝试编写一个我可以混合的特征,但没有成功,我尝试编写一个隐式扩展方法,但也没有成功。

我的隐式代码似乎不适用于 toString:

object JsonToString {
implicit class JsObjectExtensions(val target: js.Object) extends AnyVal {
override def toString:String = JSON.stringify(target)
def json:String = JSON.stringify(target)
}
}

所以我可以做 blah: "${target.json}",这更好 - 但我特别想摆脱那些大括号。

有什么方法可以用 scala.js 做到这一点吗?

最佳答案

不,没有办法做到这一点。这是因为字符串插值将始终使用对象本身的 toString() 方法,无论在其类型或隐式类中声明什么(这通常是 Scala 的事情)。

实现此目的的唯一方法是在每次创建对象时通过使用自定义 toString() 方法修补它们来实际修改对象。这将包括您从 JSON 字符串解析它们的时间。我很确定这比在字符串化它们时调用 .json 更糟糕。

关于scala.js - 如何覆盖 JS 对象的 toString() 方法以使用 JSON.stringify()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40371353/

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