gpt4 book ai didi

javascript - 在 Haxe 中为 HTML 元素转换元素访问

转载 作者:行者123 更新时间:2023-11-29 17:49:07 25 4
gpt4 key购买 nike

如果我们想在 Canvas 上画东西,我们需要得到它的二维上下文。我在项目的 index.html 中有一个 Canvas 元素:

 <body>
<canvas id="canv" width="200" height="200"></canvas>
</body>

所以现在我需要访问该元素,好的,让我们编写代码:

var cans:CanvasElement = Browser.document.getElementById("canv");

在编译阶段我得到错误:

src/Main.hx:32: characters 2-78 : js.html.Element should be js.html.CanvasElement

但是如果我们使用不安全的转换,已经没问题了:

var cans:CanvasElement = cast Browser.document.getElementById("canv");

一切正常,我可以访问并可以获取 2D 上下文或进行一些设置,例如:

cans.width = cans.height = 800;
cans.style.backgroundColor = 'rgba(158, 167, 184, 0.4)';

是的,我知道,“如果有效 - 不要修复”,我大致理解一切正常,原则上我得到了我需要的东西,当得到 Actor 时,但有人可以为我解释这个过程吗?这是什么意思 - js.html.Element 应该是 js.html.CanvasElement?我才开始学习 Haxe(尤其是编程),我很高兴,我可以做一些可行的事情,但我想知道,为什么它能工作,为什么不能工作。

最佳答案

js.html.Element should be js.html.CanvasElement

这只是意味着编译器期望 CanvasElement 类型(因为这是 cans 变量的类型提示告诉它的),但是遇到其他问题(在本例中为 Element)。您正在尝试分配 getElementById() 返回的值到 cans,但是 getElementById() 返回一个 Element

因为 ElementCanvasElement 更不具体(CanvasElement extends Element) ,您不能只将 Element 分配给 CanvasElement - 谁能说它不是 DivElement 或任何其他选项?这只能在执行代码时决定/编译器无法知道这一点,因此会出现错误(runtime vs compile time)。

这在这种情况下工作正常,因为您知道 ID 为 “canv” 的元素实际上是 CanvasElement,因此您可以通过告诉编译器你知道你在用 cast 做什么来让编译器静音。当返回值实际上是其他类型时,就会出错。

关于javascript - 在 Haxe 中为 HTML 元素转换元素访问,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45845189/

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