Я реализовал пользовательские элементы в Chrome, поэтому я знаком с этим. (FWIW document.register
было переименовано в document.registerElement
.)
Чтобы добавить что-то к прототипу пользовательского элемента позже, вам сначала потребуется ссылка на объект-прототип.
В вашем вопросе вы получаете доступ к прототипу через конструктор для DIV, HTMLDivElement.prototype
. Вы можете использовать аналогичный шаблон в пользовательских элементах. Конструктор Custom Element возвращается из registerElement. При сохранении ссылки на него вы можете использовать его для доступа прототип позже: (. Вы можете также использовать возвращаемый объект, который спецификация вызывает сгенерированного конструктор для создания элементов с использованием new BarFoo()
)
BarFoo = document.registerElement('bar-foo', ...);
// later
BarFoo.prototype.foo = ...
Имеет смысл сохранить ссылку на глобальный объект (окно), потому что это так, как это делается в таких элементах, как HTMLDivElement, хотя вам этого не нужно.
При разработке спецификации мы рассмотрели возможность создания ссылки на этот конструктор на автоматическом окне, но решили, что меньше магии и меньше загрязнений имен лучше. Мы также рассмотрели возможность добавления объекта, с помощью которого вы могли бы передать имя тега и вернуть правильный конструктор. Мы хотели сделать эту работу для встроенных элементов, а также для пользовательских элементов. К сожалению, это предложение долгое время не выдерживало пересмотра стандартов.
Существуют и другие способы делать то, что вы хотите. Например, вместо сохранения ссылки на сгенерированный конструктор вы можете напрямую сохранить ссылку на прототип. Кроме того, если у вас есть экземпляр пользовательского элемента, вы можете использовать Object.getPrototypeOf(elem)
или elem.__proto__
для получения объекта-прототипа.
HTH!
Что такое document.register? Никогда не слышал об этом, и, похоже, об этом нет на MDN. – bjb568
@ bjb568 Только что нашел это, посмотрите раздел 5.5: http://w3c.github.io/webcomponents/explainer/#defining-a-custom-element –
спасибо большое, это именно то, что мне нужно. Ваше предложение ниже будет работать, но это лучше! –