gpt4 book ai didi

scala - 什么时候使用 asInstanceOf?

转载 作者:行者123 更新时间:2023-12-05 01:16:37 26 4
gpt4 key购买 nike

我正在试用 scalajs,但对如何使用 org.scalajs.dom.html 包访问 DOM 元素感到很困惑。通过反复试验,我发现有些元素需要使用 asInstanceOf 转换为特定类型,但有些则不需要。是否有关于何时何地需要使用 asInstanceOf 的通用规则?

例如,假设我有一个 ID 为 myinputinput 元素。为了访问输入的值,我需要使用 asInstanceOf:

val content = document.getElementById("myinput").asInstanceOf[html.Input].value

但是当需要在我的div id contentdiv 中显示content 时,编译器并没有在我没有使用时报错div 元素上的 asInstanceOf:

val mydiv = document.getElementById("contentdiv")
mydiv.innerHTML = content

此外,是否有一个中心位置可以找到所有可能的 asInstanceOf 参数并将它们映射到实际的 HTML 元素?

最佳答案

getElementById的签名是

def getElementById(id: String): DOMElement

DOMElement定义为

trait DOMElement extends js.Object {
var innerHTML: String = js.native

def appendChild(child: DOMElement): Unit = js.native
}

因此,无论何时您调用 getElementById你得到一个DOMElement返回,您可以对其执行的唯一操作是 innerHTMLappendChild .

这就是为什么您的最后一个示例无需显式转换即可工作的原因。

但是DOMElement是一个非常通用的类型。有时您知道 getElementById将返回 - 比如说 - 一个 <input>元素。

那时你可以使用 asInstanceOf将您拥有的这一额外知识告知编译器。

document.getElementById("myinput").asInstanceOf[html.Input].value
^
|
hey compiler, I KNOW this is going to be an html.Input,
please let me do my things and explode otherwise.

不用说了,使用asInstanceOf需要小心.如果你错了,这次编译器将无法将你从运行时崩溃中拯救出来。

关于scala - 什么时候使用 asInstanceOf?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40505041/

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