Так работает привязка JavaScript this
.
Вы можете прочитать это: ЭТО (YDKJS)
По сути, значение this
внутри функции зависит от того, как эта функция вызывается. Так что вам нужно явно жестко связать значение this
с вашей функцией foo
, используя метод bind () или определив foo
как функцию стрелки (функции стрелки лексически связывают свой контекст).
Итак, решение - это то, что вы нашли.
Вы можете сделать:
В вашем конструкторе:
class XElement extends HTMLElement {
constructor() {
super();
this.foo = this.foo.bind(this);
}
foo() { console.log( this ); }
}
Или (мне это не нравится)
class XElement extends HTMLElement {
constructor() {
super();
this.foo = () => console.log(this);
}
}
Или
class XElement extends HTMLElement {
constructor() { super(); }
foo = () => { console.log( this ); }
}