В веб-компонентах для регистрации элемента, который вы просто вводите:
var XFoo = document.registerElement('x-foo', {
prototype: Object.create(HTMLElement.prototype)
});
Чтобы создать элемент, вы можете сделать одно из следующих:
<x-foo></x-foo>
var xFoo = new XFoo();
document.body.appendChild(xFoo);
var xFoo = document.createElement( 'x-foo')
document.body.appendChild(xFoo);
Это все прекрасно и денди. Проблемы возникают, когда вы говорите о расширении существующих элементов.
var XFooButton = document.registerElement('x-foo-button', {
prototype: Object.create(HTMLButtonElement.prototype),
extends: 'button'
});
Вопрос 1: Почему дублирование? Здесь 'button'
должно быть достаточно (тем более, что достаточно легко проработать прототип элемента с помощью Object.getPrototypeOf(document.createElement(tag));
Вопрос 2: как эта информация используется внутри страны? Что произойдет, если вы, например, имеете prototype: Object.create(HTMLFormElement.prototype
и extends: 'button'
(где то, что после extends
не соответствует прототипу)
Чтобы создать один, вы можете сделать одно из следующих действий:
<button is="x-foo-button"></button>
var xFooButton = new XFooButton();
document.body.appendChild(xFoo);
var xFooButton = document.createElement('button', 'x-foo-button');
document.body.appendChild(xFooButton);
Вопрос 3: поскольку ясно, что x-foo-button
extends button
, почему мы должны указать их оба при использовании document.createElement()
? Я подозреваю, что поскольку document.createElement()
просто создает тег с синтаксисом <button is="x-foo-button"></button>
, что приводит меня к следующему вопросу:
Вопрос 4: Какая точка синтаксиса is
? Какова фактическая разница между этим:
var XFooButton = document.registerElement('x-foo-button', {
prototype: Object.create(HTMLButtonElement.prototype),
extends: 'button'
});
И это:
var XFooButton = document.registerElement('x-foo-button', {
prototype: Object.create(HTMLButtonElement.prototype),
});
За исключением 1) Первый синтаксис понадобится <button is="x-foo-button"></button>
для создания экземпляра в документе 2). Второй синтаксис может использоваться для любого элемента, а не только для расширения пользовательских?