В официальной документации очень скупо описан метод constructor для объектов-прототипов класса Array.
«Начальное значение Array.prototype.constructor — это %Array%.»
По такому описанию сложно понять о чём вообще идёт речь. Попробую для вас изложить более подробно, что это за метод и зачем он нужен.
Что такое конструктор в JavaScript?
Заранее скажу — всё в JavaScript является объектами (объекты, строки, массивы, числа, функции).
В языке JavaScript существует такое понятие, как «ГЛОБАЛЬНЫЙ ОБЪЕКТ». Он встроен в конструкцию языка.
У этого ГЛОБАЛЬНОГО ОБЪЕКТА есть множество собственных свойств. Одним из таких свойств является класс Array.
Когда мы создаём массив вида [1,2,3], то мы создаём экземпляр класса Array. Это всегда так. Именно по этой причине у разных объектов есть свои уникальные наборы методов, которые работают только с прототипами своих классов.
Это значит, что мы не можем вызвать метод pow() у экземпляра Array, потому что метод pow() создан для работы с экземплярами класса Math. По той же причине мы не можем вызвать метод filter() у экземпляров класса Math, потому что метод filter() работает только с экземплярами Array.
За все эти взаимосвязи отвечает КОНСТРУКТОР своего класса.
Как конструктор связан с классами?
Любой класс в JavaScript не может существовать без конструктора прототипов класса. Это значит, что в каждом классе есть свой собственный конструктор объектов-прототипов.
КОНСТРУКТОР нужен для создания объектов-прототипов, которые в последствии будут уметь работать с методами прототипов данного класса.
Зачем нужен метод constructor?
В публикации JavaScript | Как проверить наличие объекта в массиве? хорошо описан пример применения метода constructor. Почитайте!
При помощи метода constructor мы можем получать значение свойства name. Оно содержит строку, которая определяет название класса объекта-прототипа. Приведу пример.
Есть массив:
var massiv = [1, 2]
У него можно обратиться к constructor и обратиться к ключу name:
massiv.constructor.name
В ответ мы получим:
"Array"
То есть теперь мы точно знаем, что в переменной massiv хранится экземпляр класса Array, а значит к этой переменной мы можем применять все методы для объектов-прототипов Array.
Сейчас вам может показаться, что всё очевидно. Мы же создали массив, а значит он принадлежит классу Array. Но представьте, что у вас есть сложная бизнес-логика в алгоритме, которая постоянно перезаписывает одну и ту же переменную.
Представьте, что у вас уже выпущен программный продукт который установлен у сотен тысяч пользователей. Есть новая и старая версия продукта. Старая логика работала на массивах, а новая логика работает на объектах. Все запросы сливаются в одну очередь, а значит обрабатывать эти запросы нужно будет по-разному.
На каком-то этапе нужно будет сортировать запросы старого формата с запросами нового формата. Почему «нужно»? Потому что вы не сможете донести до каждого пользователя необходимость перехода на новую систему. Пользователи не любят перемены. Значит вам нужно будет где-то в коде определять что сейчас хранится в переменной — прототип «Array»?, прототип «Object»?, прототип «String»?, прототип «HTMLCollection»?, прототип «NodeList»?, прототип «Dата»?, прототип «URL»? и так далее ….
Знание имени КОНСТРУКТОРА помогает создавать правильные сортировки в условиях.
Информационные ссылки
Стандарт ECMAScript — Раздел «The Array Constructor» — https://tc39.es/ecma262/#sec-array-constructor