Ist es ein beabsichtigtes Verhalten von Polymer, dass BeforeRegister() -Methode auf einer Ebene HTMLElement
ausgeführt wird? Dies führt zu einem Fehler bei der Verwendung einer Pfeilfunktion in der Eigenschaftsdeklaration innerhalb eines berechneten Eigenschaftswerts. Es löst nicht auf, weil this
eine native HTMLElement
ist, während das Objekt, auf das die Funktion aufgerufen wird, das erweiterte Polymerelement zur Laufzeit ist (was funktioniert, wenn eine normale Funktion verwendet wird)?`this` Schlüsselwort löst in HTMLElement in Polymer in BeforeRegister-Methode
funktioniert das nicht:
class TestComponent {
beforeRegister() {
/* during beforeRegister() execution `this` is a `HTMLElement`*/
this.is = 'test-component';
this.properties = {
_testElement: {
type: Object,
value:() => this.$.testElement
}
};
}
}
Dies funktioniert:
class TestComponent {
beforeRegister() {
this.is = 'test-component';
this.properties = {
_testElement: {
type: Object,
value: function() {
/* `this` is an instance of TestComponent */
return this.$.testElement
}
}
};
}
}
Es ist kein großes Problem, aber ich frage mich, ob es ein Problem gegenüber ES6 Unterstützung in Polymer ist und wird behoben oder ob es ein beabsichtigtes Verhalten ist.
Die babel transpilation ist richtig. Das 'This' in der Pfeilfunktion ist dasselbe' This' wie in 'BeforeRegister', oder? – Bergi
Es sollte eine Instanz von 'TestComponent' sein. Das Problem ist, dass, während beforeRegister() ausgeführt wird, 'this' eine Instanz von' HTMLElement' ist. Vielleicht ist Polymer hier die Ursache des Problems. Dies könnte ein Problem sein, da andere vor allem bei der Verwendung von Polymer mit es6-Klassen gleich aussehen werden. Also würde ich es lieber als Duplikat markieren. – SeDav
Sicher, Polymer könnte hier seltsame Dinge tun, indem er 'beforeRegister' auf einem' HTMLElement' anstelle der 'TestComponent' Instanz aufruft, aber die Pfeilfunktion funktioniert wie erwartet. – Bergi