最近、ES6 でクラスをテストしていたのですが、クラスを作成するときにコンストラクターによって指定された値を指定できないことに気付きました。
以前の ES5 ではこれが可能でした。
どちらの場合も、クラスをインスタンス化します。new MyClass
これを行う理由は、関数のみを含む現在のクラスのサブセットを返すことができるためです。
ES5 - 戻り値My class was init with: Blah
var MyClass = function() {
this.initVar = 'Blah'
return 'My Class was init with: ' + this.initVar
}
ES6 - 戻り値{}
class Bob {
constructor() {
return 'hello'
}
}
ベストアンサー1
によるクラス記事TC39 Web サイトによると、ES6 クラス構文には暗黙的なコンストラクター関数があり、クラス定義にそのような関数が提供されていない場合に呼び出されます。
これは、独自のコンストラクターを提供し、必要なオブジェクトを返すことでオーバーライドできます。例:
class Bob {
constructor(name) {
return {hi: name}; // returns an object other than *this*.
}
}
実際のところ:
var bob = new Bob('bob');
console.log(bob.hi); // 'bob'
クラスを拡張するには、次のようにします。
class Bill extends Bob {
}
しかし拡張する暗黙のコンストラクタもあるので、新しいインスタンスを返します。請求書継承するものボブプロトタイプ。 以来こんにちはコンストラクタで定義され、継承されていない場合は、次のようになります。
var bill = new Bill('bill');
console.log(bill.hi); // undefined
Billを初期化するにはボブを呼び出すコンストラクタを提供する素晴らしいこの呼び出しにより、これの目的請求書返される値に素晴らしい例えば
class Bill extends Bob {
constructor(name) {
super(name);
}
}
今:
var bill = new Bill('bill');
console.log(bill.hi); // bill
また、注目すべきは、クラス宣言いつも厳密モードコード。
実行可能なスニペットとして:
class Bob {
constructor(name) {
return {hi: name}; // returns an object other than *this*.
}
}
var bob = new Bob('bob');
console.log(bob.hi); // 'bob'
class Bill extends Bob {
constructor(name) {
super(name);
}
}
var bill = new Bill('bill');
console.log(bill.hi); // bill