Я читаю You Do not Know 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]();
, что здесь означает?