Из-за реализации пользовательского элемента вы должны определить все обратные вызовы, прежде чем элемент будет определен с помощью customElements.define()
. Эти обратные вызовы доступны только для чтения.
Чтобы справиться с личными значениями, вы можете определить свой собственный обратный вызов, который будет вызываться стандартным методом connectedCallback()
.
См. Пример ниже:
class MyCustomElement extends HTMLElement {
constructor() {
super()
let _myPrivateData = 'privateValue'
// the following does not cause the callback to be invoked at all!
this.connectedCallback = function() {
console.log('connected! : ' + _myPrivateData )
}
}
connectedCallback() {
this.connectedCallback()
}
}
customElements.define('my-custom-element', MyCustomElement)
<my-custom-element></my-custom-element>
Обновление
Эффективные обратные вызовы жизненного цикла фактически только для чтения / заморожены . Вы не можете изменить их после определения пользовательского элемента.
Учтите, что при вызове customElements.define()
обратные вызовы жизненных циклов копируются в реестр пользовательских элементов из записей обратного вызова class
с тем же именем или устанавливаются на void()
, если имя обратного вызова не не существует
Когда создается экземпляр пользовательского элемента, это вызываемые копии обратного вызова, а не методы класса обратного вызова prototype
. Вы не можете получить доступ и, следовательно, изменить эти копии.
Вы все еще можете модифицировать обратные вызовы класса (записи prototype
), но это не повлияет на жизненный цикл пользовательского элемента.
Завещание обеспечит постоянство жизненного цикла для всех одинаковых экземпляров пользовательских элементов.