Я пытаюсь написать @Prop
декоратор, чтобы помочь мне установить пользовательские атрибуты элементов.
Вот код, который я пытаюсь достичь:
class MyClass extends HtmlElement {
get text() {
return this.getAttribute('text')
}
set text(newVal){
this.setAttribute('text', newVal)
}
connectedCallback() {
this.innerHTML = `<div>${this.text}</div>`
}
}
Этокласс с декоратором
class MyClass extends HtmlElement {
@Prop() text: string;
connectedCallback() {
this.innerHTML = `<div>${this.text}</div>`
}
}
Это функция декоратора
const Prop = () => (target : any, key : string) => {
const getter = () => target.getAttribute(key);
const setter = (newVal) => target.setAttribute(key, newVal);
if (!delete this[key]) return;
Object.defineProperty(target, key, {
get: getter,
set: setter
});
}
Однако всякий раз, когда вызывается функция геттера, я получаю эту ошибку:
Uncaught TypeError: Illegal invocation
at HTMLElement.getter (app.js:16)
Проверкаapp.js:16
показывает эту строку кода:
const getter = () => target.getAttribute(key);
с target.getAttribute(key);
, подчеркнутым.