カスタム要素を Chrome に実装したので、これに精通しています。(FWIWdocument.register
は に改名されましdocument.registerElement
た。)
後でカスタム要素のプロトタイプに何かを追加するには、最初にプロトタイプ オブジェクトへの参照が必要です。
あなたの質問では、DIV のコンストラクターを介してプロトタイプにアクセスしますHTMLDivElement.prototype
。カスタム要素でも同様のパターンを使用できます。カスタム要素のコンストラクターは、registerElement から返されます。参照を保存することで、後でプロトタイプにアクセスするために使用できます。
BarFoo = document.registerElement('bar-foo', ...);
// later
BarFoo.prototype.foo = ...
(仕様が生成されたコンストラクターを呼び出して、を使用して要素を作成する、返されたオブジェクトを使用することもできますnew BarFoo()
。)
参照をグローバル オブジェクト (ウィンドウ) に保存することは理にかなっています。これは、HTMLDivElement などの組み込み要素が機能する方法だからですが、そうする必要はありません。
仕様を開発する際に、window でこのコンストラクタへの参照を自動的に設定することを検討しましたが、魔法と名前の汚染が少ない方が良いと判断しました。また、タグ名を渡して正しいコンストラクターを取得できるオブジェクトを追加することも検討しました。カスタム要素だけでなく、組み込み要素でも機能するようにしたいと考えていました。残念なことに、その提案は、標準の議論リストで長く生き残ることはできませんでした。
あなたが望むことをする他の方法があります。たとえば、生成されたコンストラクターへの参照を保存する代わりに、プロトタイプへの参照を直接保存できます。または、カスタム要素のインスタンスがある場合は、Object.getPrototypeOf(elem)
またはelem.__proto__
を使用してプロトタイプ オブジェクトを取得できます。
チッ!