usar sintaxis funciones funcion flecha example ecmascript cuando anonimas javascript prototype ecmascript-6 arrow-functions

sintaxis - map javascript



¿Las funciones de flecha ES6 no funcionan en el prototipo? (1)

Cuando las funciones de flecha ES6 no parecen funcionar para asignar una función a un objeto con prototype.object. Considere los siguientes ejemplos:

function Animal(name, type){ this.name = name; this.type = type; this.toString = () => `${this.name} is a ${this.type}`; } var myDog = new Animal(''Max'', ''Dog''); console.log(myDog.toString()); //Max is a Dog

Usar la función de flecha explícitamente en la definición del objeto funciona, pero usar las funciones de flecha con la sintaxis Object.prototype no:

function Animal2(name, type){ this.name = name; this.type = type; } Animal2.prototype.toString = () => `${this.name} is a ${this.type}`; var myPet2 = new Animal2(''Noah'', ''cat''); console.log(myPet2.toString()); //is a undefined

Solo como prueba de concepto, el uso de la sintaxis de cadena de plantilla con la sintaxis Object.prototype funciona:

function Animal3(name, type){ this.name = name; this.type = type; } Animal3.prototype.toString = function(){ return `${this.name} is a ${this.type}`;} var myPet3 = new Animal3(''Joey'', ''Kangaroo''); console.log(myPet3.toString()); //Joey is a Kangaroo

¿Me estoy perdiendo algo obvio? Siento que el ejemplo 2 debería funcionar lógicamente, pero la salida me desconcierta. Supongo que es un problema de alcance, pero la salida ''me resulta indefinido''.

Violín ES6


Las funciones de flecha proporcionan un léxico this . Utiliza this que está disponible en el momento en que se evalúa la función.

Es lógicamente equivalente a (lo siguiente no es un código válido ya que no puede tener una variable llamada this ):

(function(this){ // code that uses "this" })(this)

En su primer ejemplo, la función de flecha está dentro del constructor, y this apunta a la instancia recién generada.

En su tercer ejemplo, no se usa una función de flecha y el comportamiento estándar de this funciona como siempre (esto en el alcance de la función).

En su segundo ejemplo, utiliza una función de flecha, pero en el alcance que se evalúa, this es global / indefinido.