私はあなたが知らないJSを読んでいます:ES6 &これを超えて、このスニペットがSymbol.speciesセクションで発生しました。このスニペットでは何が行われますか?
class Cool {
// defer `@@species` to derived constructor
static get [Symbol.species]() { return this; }
again() {
return new this.constructor[Symbol.species]();
}
}
class Fun extends Cool {}
class Awesome extends Cool {
// force `@@species` to be parent constructor
static get [Symbol.species]() { return Cool; }
}
var a = new Fun(),
b = new Awesome(),
c = a.again(),
d = b.again();
c instanceof Fun; // true
d instanceof Awesome; // false
d instanceof Cool; // true
機能Symbol.speciesは{何かを返す}常にコンストラクタ関数を返す必要がありますように思えます。しかし、この関数の最初の存在で: static get [Symbol.species]() { return this; }
私はいつもこれがコンストラクタ関数の代わりにオブジェクトであるべきだと思うので、私は混乱しています。 事実を明確にするために私を助けてください。
約return new this.constructor[Symbol.species]();
とは何ですか?