JS Built-ins
ArrayArray[Symbol.species]advanced

Array[Symbol.species] β€” subclass map()

πŸ“– Usage Example
class MyArr extends Array {}
const a = new MyArr(1, 2, 3)
a.map(x => x * 2) instanceof MyArr  // β†’ true

Array[Symbol.species] controls which constructor methods like map() use for the return type.

Array[Symbol.species]

Symbol.species is a well-known symbol that lets built-in methods (like .map(), .filter(), .slice()) know which constructor to use when creating a derived object. When a class extends Array, those methods return instances of the subclass by default.

Challenge: Create ArraySubclass that extends Array. Implement mapReturnsSubclass that returns true when .map() on an ArraySubclass instance produces another ArraySubclass instance.

mapReturnsSubclass() // β†’ true
πŸ’‘ Hints (2)
  • β€’ When a class extends Array, iterating methods like `.map()` use `Symbol.species` to decide the result type.
  • β€’ By default, subclasses return instances of themselves from `.map()` β€” no extra code needed.