ES6 Arrow 関数が、prototype.object を使用してオブジェクトに関数を割り当てるために機能しないように見える場合。次の例を検討してください。
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
オブジェクト定義で矢印関数を明示的に使用すると機能しますが、 Object.prototype 構文で矢印関数を使用すると機能しません。
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
概念実証として、Object.prototype 構文で Template 文字列構文を使用すると機能します。
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
明らかな何かが欠けていますか?例 2 は論理的に機能すると思いますが、出力に困惑しています。私はそれがスコーピングの問題だと推測していますが、「未定義です」という出力にうんざりしています。