tutorial syntax coffeescript scope this arrow-functions

syntax - tutorial - coffeescript vs javascript



¿Cómo me refiero a ''esto'' real dentro de la devolución de llamada de fat-arrow de CoffeeScript? (1)

Puedes alcanzar tu objetivo al menos de tres maneras. El primero sería:

class myClass constructor: -> element = $ "#id" element.click => @myMethod(element.value) return return myMethod: (c) -> window.console.log(c) return

Y el 2do:

class myClass constructor: -> element = $ "#id" myMethodCallback = (c) => @myMethod(c) element.click -> myMethodCallback(@value) return return myMethod: (c) -> window.console.log(c) return

El tercero es como se muestra a continuación. Sin embargo, no estoy seguro del uso de la API de jQuery, así que mejor verifique en la página de documentos apropiada .

class myClass constructor: -> element = $ "#id" element.click (event) => @myMethod(event.target.value) return return myMethod: (c) -> window.console.log(c) return

Preferiría la primera manera, ya que parece ser más sencillo. Esto o lo otro, pero debe decidir "qué esto" le gustaría tener en el alcance del elemento. Haga clic en Volver a llamar. No es posible acceder a dos ''thises'' al mismo tiempo.

Por cierto. Todas esas declaraciones de devolución parecen innecesarias. La solución de trabajo más corta se vería así:

class myClass constructor: -> element = $ "#id" element.click => @myMethod(element.value) myMethod: (c) -> window.console.log(c)

El título lo dice todo. Cuando uso la flecha de grasa en CoffeeScript, la almacena primero antes de llamar a la función. Por ejemplo:

class myClass constructor: -> element = $ "#id" element.click -> @myMethod(@value) return return myMethod: (c)-> window.console.log(c) return

rendiría

var myClass; myClass = (function() { function myClass() { var element; element = $("#id"); element.click(function() { this.myMethod(this.value); }); return; } myClass.prototype.myMethod = function(c) { window.console.log(c); }; return myClass; })();

Ahora en la línea # 8 de JavaScript, this.myMethod está mal. En este ámbito, this refiere al element lugar de a la clase MyClass .

Sin embargo, si en la línea 4 de CoffeeScript, reemplazo element.click -> por element.click => la línea # 8 en JavaScript se convertirá en _this.myMethod(_this.val) donde this referencia a myClass se almacena en _this antes de llamar la función. Pero _this.value no está definido e, incluso si estuviera definido, el objeto al que intento acceder aquí es un element (que se refiere a this palabra clave en el alcance de esta función).

¿Cómo accedería al real this ahora?