慣れていない場合、EMCA6 ドラフトではアロー関数の構文が追加されます。主な違いは次のとおりです。
- アロー関数にはレキシカルな this があります (したがって、Function.prototype.bindを呼び出したり、クロージャーを作成したりする必要はありません)
- より短い構文
() => "foo"
vsfunction(){ return "foo";}
- アロー関数には .prototype がありません。したがって、それらはコンストラクタとして使用できず、new で呼び出すことはできず、軽量であることを意図しています。
そうは言っても、次の簡単な例を見てみましょう。
var Animal = function(sound) {
this.sound = sound;
//arrow notation has lexical this, so this makeNoise must be defined in the constructor
Animal.prototype.makeNoise = () => this.sound;
};
let dog = new Animal("woof!");
dog.makeNoise(); //woof!
ここでは、通常の関数ではなくアロー関数をメソッドの 1 つとして使用する単純なクラスを作成しています。Animal.prototype.makeNoise
アニマルを初期化するたびにこれが設定されていることは知っていますが、上記には通常と比較して他の欠点がありますか:
var Animal = function(sound) {
this.sound = sound;
};
Animal.prototype.makeNoise = function() { return this.sound; };
let dog = new Animal("woof!");
dog.makeNoise(); //woof!
これを行うことに危険が潜んでいるかどうかを知りたいと思っています。人々は、新しい短縮された構文をどこでも使用したくなると確信しているためです。前もって感謝します。