Javascript 为什么“is”属性只适用于覆盖内置元素的web组件?
Javascript 为什么“is”属性只适用于覆盖内置元素的web组件?,javascript,html,web-component,custom-element,Javascript,Html,Web Component,Custom Element,is=”“属性是一种通过自定义元素为内置元素添加额外智能的方法,但它似乎只有在自定义元素的JS实现扩展了正在使用它的内置元素时才起作用 在我看来,将附加功能定义为自定义元素并将其应用于任何内置元素将非常有用。这将允许web组件的用户从增强的行为中获益,同时保留标准语义元素的含义 这种限制的原因是什么 Firefox似乎确实允许在内置元素()上升级is=“”,但我尝试过的其他浏览器不允许,而且文档说,只有在自定义元素“扩展了它所应用的元素类型”的情况下才能使用它 /*我想让它呈现“你好,世界!”两
is=”“
属性是一种通过自定义元素为内置元素添加额外智能的方法,但它似乎只有在自定义元素的JS实现扩展了正在使用它的内置元素时才起作用
在我看来,将附加功能定义为自定义元素并将其应用于任何内置元素将非常有用。这将允许web组件的用户从增强的行为中获益,同时保留标准语义元素的含义
这种限制的原因是什么
Firefox似乎确实允许在内置元素()上升级is=“
”,但我尝试过的其他浏览器不允许,而且文档说,只有在自定义元素“扩展了它所应用的元素类型”的情况下才能使用它
/*我想让它呈现“你好,世界!”两次*/
参考:
如果希望将自定义元素用作其自己的元素,例如
<my-elem></my-elem>
然后您需要使用extends-htmldevelment
并在定义customElements.define('my-elem',MyElement,{extends:'div'))中指定代码>
这是两种不同的使用方法,不要混用。我认为它们不能混合的原因是因为两种工作都需要多重继承,而这是不受支持的
也许可以把一些东西拼凑在一起,尽管这可能会很难看。最佳做法是使用其中一个。您可以通过扩展自定义元素的定义类来覆盖(非内置)自定义元素
class Base extends HTMLElement {}
customElements.define( 'base-element', Base )
class BaseExtension extends Base {}
customElements.define( 'extended-element', BaseExtension )
关于多重继承潜在问题的观点是有道理的。
<div is="my-elem"></div>
class Base extends HTMLElement {}
customElements.define( 'base-element', Base )
class BaseExtension extends Base {}
customElements.define( 'extended-element', BaseExtension )