我在 Chrome 中实现了自定义元素,所以我对此很熟悉。(FWIWdocument.register
已重命名document.registerElement
。)
稍后要向自定义元素的原型添加内容,首先需要对原型对象的引用。
在您的问题中,您通过 DIV 的构造函数访问原型,HTMLDivElement.prototype
. 您可以在自定义元素中使用类似的模式。自定义元素的构造函数从 registerElement 返回。通过保存对它的引用,您可以稍后使用它来访问原型:
BarFoo = document.registerElement('bar-foo', ...);
// later
BarFoo.prototype.foo = ...
(您也可以使用返回的对象,规范调用生成的构造函数来使用 .)创建元素new BarFoo()
。)
将引用保存在全局对象(窗口)上是有意义的,因为这是 HTMLDivElement 等内置元素的工作方式,尽管您不必这样做。
在开发规范时,我们考虑过在窗口自动设置对此构造函数的引用,但认为少一些魔法和少一些名称污染会更好。我们还考虑添加一个对象,您可以传递标签名称并取回正确的构造函数。我们想让内置元素和自定义元素都可以使用。不幸的是,该提案并没有在标准讨论列表中存活很长时间。
还有其他方法可以做你想做的事。例如,您可以直接保存对原型的引用,而不是保存对生成的构造函数的引用。或者,如果您有自定义元素的实例,您可以使用Object.getPrototypeOf(elem)
或elem.__proto__
获取原型对象。
!