You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

自定义元素继承HTMLCanvasElement后width属性为何为undefined?

问题原因及解决方法

你的问题出在内置扩展自定义元素的使用方式错误:

通过{ extends: 'canvas' }定义的是基于原生canvas扩展的自定义元素,这类元素不能直接使用<render-area>这种新标签名,必须在原生<canvas>标签上通过is属性指定自定义元素名,否则浏览器不会将其识别为canvas的扩展实例,自然无法访问canvas固有的width/height属性。

修正后的代码

JavaScript 部分(无需修改)

class Renderer extends HTMLCanvasElement {
  constructor() {
    super();
  }
}

customElements.define("render-area", Renderer, { extends: 'canvas' });

HTML 部分(修改标签写法)

<canvas is="render-area" width="500" height="500" style="border: 3px solid black"></canvas>
<button onclick="console.log(document.querySelector('canvas[is=\"render-area\"]').width)">log width of render area</button>

补充说明

如果一定要使用独立的<render-area>标签,那不能直接继承HTMLCanvasElement,需要在自定义类内部创建canvas元素并挂载到自定义元素中,同时手动实现width/height的getter和setter方法来同步内部canvas的属性,但这种方式不属于内置元素扩展,而是独立自定义元素的实现逻辑。

内容的提问来源于stack exchange,提问作者c136

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.21 00:54:31