document.registerElement-为什么我们需要同时指定“原型”和“扩展”?

吉普夫

考虑到我想扩展本机button元素,并创建自己的super-button元素。据我所知,它必须遵循以下模式:

var SuperButton = document.registerElement('super-button', {
  prototype: Object.create(HTMLButtonElement.prototype),
  extends: 'button'
});

在我看来,这很奇怪-prototypeextends参数不是一回事吗?如果我明确地说要super-button使用HTMLButtonElement原型,为什么还需要指定它扩展了button元素?这是多余的吗?对我来说,它看起来完全一样。

保罗

根据“自定义元素”规范

通常,不能简单地通过查看扩展的元素接口来确定扩展元素的名称,因为许多元素共享同一接口(例如q和blockquote都共享HTMLQuoteElement)。

换句话说,尽管对于<button>元素来说可能是多余的,但通常它并不是多余的,并且规范需要支持一般情况。

我会争辩说,这甚至不是多余的<button>,因为没有什么可以阻止您这样做:

var SuperButton = document.registerElement('super-button', {
  prototype: Object.create(HTMLButtonElement.prototype),
  extends: 'a'
});

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

我有错误的document.registerElement未定义

window.customElements.define()和document.registerElement()有什么区别

是否必须使用document.registerElement()?

提供document.registerElement()有哪些优势?

规范不推荐使用document.registerElement`吗?

chrome 中 document.registerElement 的替代代码

如何避免对使用document.registerElement注册的组件发出警告

如何在Polymer v1中处理document.registerElement弃用?

DART registerElement

有没有没有document.registerElement()的方法来定义新的HTML元素?

条带registerElement未定义

我们需要同时需要require和Gemfile吗?

Angular Router:为什么我们同时需要:警卫和事件?

为什么我们同时需要迭代和迭代器概念?

为什么我们同时需要std :: promise和std :: future?

我们是否需要同时包含<netinet / in.h>和<arpa / inet.h>标头?它们之间有什么区别?

store.destroy() 和 session.destroy() 有什么区别?我们需要同时使用两者吗?

为什么我们同时“包含”和“依赖” RcppArmadillo?

为什么在AngularJS的输入中需要同时指定名称和ng-model?

为什么我们需要javadoc和sources jar?

为什么我们需要 LiveData 和 ViewModel

为什么我们需要Bower和Nuget?

为什么我们需要分别编译和链接?

为什么要教我们将document.getElementById(“ id”)分配给变量,然后将该变量与属性一起使用?

为什么我们不能将document.querySelector方法分配给另一个变量并使用它?

为什么我们创建一个变量来引用一个类而不是仅仅使用document.querySelector(“。class”)?

如何删除document [“ oncontextmenu”]和document [“ onselectstart”]?

为什么我们使用扩展?

Java:为什么我们可以从非子类访问字段和方法时需要扩展类