Quando le funzioni dell'ES6 Arrow non sembrano funzionare per assegnare una funzione a un oggetto con prototype.object. Prendere in considerazione i seguenti esempi:Le funzioni freccia ES6 non funzionano sul prototipo?
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
Utilizzando la funzione freccia esplicitamente nelle opere di definizione dell'oggetto, ma utilizzando le funzioni di direzione con la sintassi Object.prototype non lo fa:
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
Proprio come un proof of concept , usando la sintassi stringa di modello con la sintassi Object.prototype funziona:
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
mi sto perdendo qualcosa di ovvio? Sento che l'esempio 2 dovrebbe funzionare logicamente, ma sono sconcertato dall'output. Immagino che sia un problema di scoping, ma sono scartato dall'output "è un indefinito".
possibile duplicato di [funzione freccia/dichiarazione di funzione/espressioni: sono equivalenti/scambiabili?] (Http://stackoverflow.com/q/34361379/1048572) – Bergi
@Bergi La mia domanda è stata pubblicata 10 mesi fa e ha 0 upvotes. Come potrebbe essere un duplicato di una domanda pubblicata 5 mesi fa, e perché è importante decidere adesso? –
Qui non è stata assegnata alcuna colpa (avviso, inoltre, non ho chiuso la domanda ma ho pubblicato solo un commento). L'unica cosa importante è che i futuri lettori sono indirizzati al post canonico molto utile su questo argomento, ed è per questo che l'ho collegato. – Bergi