Задать вопрос

Расширение встроенных классов — ничего не пойму?

Код(взят с learn.js):
class PowerArray extends Array {
  isEmpty() {
    return this.length === 0;
  }
}

let arr = new PowerArray(1, 2, 5, 10, 50);
alert(arr.isEmpty()); // false

let filteredArr = arr.filter(item => item >= 10);
alert(filteredArr); // 10, 50
alert(filteredArr.isEmpty());

Они пишут вот что:

Обратите внимание на интересный момент: встроенные методы, такие как filter, map и другие возвращают новые объекты унаследованного класса PowerArray. Их внутренняя реализация такова, что для этого они используют свойство объекта constructor.

Мой вопрос: Какие еще объекты они возвращают? Откуда, Для чего, Как и Куда? И у какого объекта свойство constructor?

В примере выше,arr.constructor === PowerArray
Поэтому при вызове методаarr.filter() он внутри создаёт массив результатов, именно используя arr.constructor, а не обычный массив. Это замечательно, поскольку можно продолжать использовать методы PowerArrayдалее на результатах.


Мои вопросы: внутри чего он создает массив результатов? Почему, как можно продолжать использовать методы на результатах?

Помогите, пожалуйста. Т.к. я вообще не код этот понять не могу, не описание к нему, которое выше прикреплено.
Learn. JavaAcript является справочником и потому не объясняет практически ничего.

Просьба модератору: пожалуйста, не удаляйте мой вопрос. Я искал вчера на тему расширения классов в Гугле ответы на мои вопросы и не нашел. В т.ч. смотрел видосы на Ютубе.
  • Вопрос задан
  • 431 просмотр
Подписаться 1 Простой Комментировать
Решения вопроса 1
hahenty
@hahenty
('•')
На данном этапе познания в такие вещи надо просто верить. Понимание приходит позже, когда требуется окунуться в потроха языка программирования. Да и в целом, чтение справочников — это навык, который развивается вместе с теоретическими и практическими знаниями.
Например

Поэтому при вызове метода arr.filter() он внутри создаёт массив результатов, именно используя arr.constructor, а не обычный массив. Это замечательно, поскольку можно продолжать использовать методы PowerArray далее на результатах.

Лично я о таком не знал, что расширения класса будут отражаться на результирующих массивах. Я бы подумал, что придётся вручную переопределять нативные методы, чтобы они применяли классовое расширение на результатах. Но создатели js решили учесть это, когда ввели class-extend в язык. И, как мне теперь кажется, метод constructor как раз занимается расширяющей рутиной, предварительно будучи самим переопределённым где-то внутри конструкции class-extend. И другие нативные методы теперь опираются на собственный метод объекта расширенного класса, а не исходного.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
Alexandroppolus
@Alexandroppolus
кодир
Вопросы выглядят так, будто ты начал читать учебник прямо с этой главы о расширении встроенных классов.
А ведь там зачем-то есть ещё и другие главы, например, про функции, возврат значения из функций, constructor, методы, классы, создание объектов внутри функций, стандартные методы массива, и т.д.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы