is属性是唯一合法方式,用于将原生HTML标签(如)升级为定制化内置元素;不支持等非法用法,且必须配合customElements.define()中{ extends: "canvas" }选项及正确构造函数调用。

is 属性是让浏览器把一个原生 HTML 标签“升级”为定制化内置元素(Customized Built-in Element)的唯一合法方式。它不是可选修饰,而是强制入口——没它,customElements.define() 注册的扩展类就完全不会生效。
为什么 能用,而 不行
浏览器解析 HTML 时,只认标准标签名。你写 ,哪怕已注册 class MyRenderer extends HTMLCanvasElement,DOM 中生成的仍是 HTMLUnknownElement 实例——width、getContext() 全部 undefined。
is 属性的作用是显式声明:“这个 不是普通 canvas,它该走我注册的 MyRenderer 类逻辑”。只有这样,实例才真正继承 HTMLCanvasElement 原型链。
- 注册必须带
{ extends: "canvas" },否则is无效 -
is的值(如"my-renderer")必须与customElements.define()第一个参数完全一致(大小写敏感) -
data-is、data-custom等自定义属性毫无作用,浏览器不识别
is 只能配合特定原生标签使用
不是所有标签都支持 将 Markdown 文章转换为微信公众号兼容的纯 HTML 格式。当用户要求"转成微信格式"、"生成公众号文章 HTML"、"排版到微信草稿箱"、"微信粘贴格式"时触发。输出带内联样式的纯 HTML,微信编辑器可直接渲染,无需额外适配。支持标题、段落、列表、粗体、行内代码、表格、引用块、代码块、配图的完整转换。 比如你想扩展 继承内置元素类(如 如果漏掉或延迟调用,会出现看似奇怪的问题:元素渲染正常,但 即使代码全对,is。目前规范明确允许的只有: 、、、、、、、、、、、、
、 、 、
、
、、、、 等有限集合。HTMLDivElement,但 div 不在规范允许列表中。此时只能退回到自主自定义元素(),自己实现全部行为。
is,浏览器会静默忽略,不报错也不升级is attribute” 列表需定期核对,新增支持极慢构造函数里
super() 必须调用,且不能晚于任何 DOM 访问HTMLButtonElement)时,constructor() 中第一件事必须是 super()。它负责初始化底层 DOM 对象状态,比如 button.type、input.value 的初始值绑定。this.value 读不到初始值、this.width 始终为 0、getAttribute("value") 返回字符串而 this.value 是空字符串。
super() 必须在访问任何原生属性/方法前执行connectedCallback() 里补调 super() —— 此时实例已创建完毕,再调无效connectedCallback() 或 attributeChangedCallback() 中容易被忽略的兼容性与调试盲区
is 行为在不同场景下仍可能失效:
,但 JS 尚未执行注册,元素仍是普通 HTMLCanvasElement;需确保 customElements.define() 在 DOM 解析前完成is 无问题,但若通过 innerHTML 动态插入含 is 的字符串,浏览器不会自动升级——必须用 document.createElement("canvas", { is: "my-renderer" })
HTMLCanvasElement,而非自定义类名;要确认是否升级成功,得查 element.constructor.name 是否等于你的类名
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!










