JS Built-ins
ArrayArray[Symbol.species]advanced

Array[Symbol.species] β€” override to return plain Array

πŸ“– Usage Example
class MyArr extends Array {
  static get [Symbol.species]() { return Array }
}
const a = new MyArr(1, 2, 3)
a.map(x => x) instanceof Array  // β†’ true (not MyArr)

Override Symbol.species to make derived methods return a plain Array instead of the subclass.

Overriding Symbol.species

You can override Symbol.species in a subclass to control which constructor derived methods use. Returning Array (the base class) makes .map() and .filter() return plain arrays instead of subclass instances.

Challenge: Create PlainResultArray that extends Array but overrides Symbol.species so that .map() returns a plain Array, not a PlainResultArray. Implement mapReturnsPlainArray that returns true when this is verified.

mapReturnsPlainArray() // β†’ true
πŸ’‘ Hints (2)
  • β€’ Add `static get [Symbol.species]() { return Array }` inside the class.
  • β€’ After this override, `.map()` calls `new Array(...)` instead of `new PlainResultArray(...)`.