Tengo una función javascript definida en polímero como tal: myTest(arg) {<do stuff here>}
Dentro de esta función, en función de algunas condiciones, quiero cambiar el onclick de un botón definido en la plantilla de polímero a alguna otra función. Para esto estoy haciendo document.getElementById('myButton').onclick = function() {myTest('someArg')};
El problema que tengo es que cuando se invoca la línea anterior, aparece un error
TypeError no detectado: myTest no es una función.
Si trato de usar la palabra clave de función al declarar la función, el compilador se queja
Símbolo inesperado. Se esperaba un constructor, método, descriptor de acceso o propiedad.
¿Cuál es la sintaxis correcta para cambiar la función onclick del botón?
Es difícil decirlo con seguridad sin ver el ejemplo completo del código fuente, pero parece que el problema al que se enfrenta está relacionado con JavaScript, que no infiere this como el contexto para llamar a métodos de instancia de la misma manera que, por ejemplo, Java. Para complicar más las cosas, this no tendría el valor esperado dentro de la function que crea para el detector de clics.
Una forma de evitarlo sería usar una función de flecha, ya que no están redefiniendo el contexto de ejecución:
document.getElementById('myButton').onclick = () => { this.myTest('someArg') }; Otra alternativa es capturar this explícitamente en una variable separada y luego usar esa variable dentro de la función:
var self = this; document.getElementById('myButton').onclick = function() { self.myTest('someArg') };