HTML Diff
0 added 0 removed
Original 2026-01-01
Modified 2026-02-26
1 <p>Наследование классов - механизм, позволяющий создавать классы (говорят подклассы) на основе других классов (называемых базовыми или суперклассами). Подклассы в таком случае "наследуют" структуру базовых классов, то есть получают возможность использовать все, что определено в базовом классе.</p>
1 <p>Наследование классов - механизм, позволяющий создавать классы (говорят подклассы) на основе других классов (называемых базовыми или суперклассами). Подклассы в таком случае "наследуют" структуру базовых классов, то есть получают возможность использовать все, что определено в базовом классе.</p>
2 <p><em>Механизм наследования - сложная система. Поэтому изучаться он будет в несколько приемов, на протяжении всего курса. Кроме того, не забываем что говоря про классы в JavaScript, мы на самом деле говорим про прототипы.</em></p>
2 <p><em>Механизм наследования - сложная система. Поэтому изучаться он будет в несколько приемов, на протяжении всего курса. Кроме того, не забываем что говоря про классы в JavaScript, мы на самом деле говорим про прототипы.</em></p>
3 <p>Рассмотрим наследование на примере структуры HTML. Каждый тег в HTML по-своему уникален. С другой стороны, все они имеют общие атрибуты и некоторые другие характеристики. Попробуем отобразить это с помощью иерархии классов.</p>
3 <p>Рассмотрим наследование на примере структуры HTML. Каждый тег в HTML по-своему уникален. С другой стороны, все они имеют общие атрибуты и некоторые другие характеристики. Попробуем отобразить это с помощью иерархии классов.</p>
4 <p>Конкретные элементы, представленные тегами в HTML, наследуют этот класс:</p>
4 <p>Конкретные элементы, представленные тегами в HTML, наследуют этот класс:</p>
5 <p>Наследование записывается так: A extends B. Эта запись означает, что класс<em>A</em>наследует класс<em>B</em>. Теперь посмотрим, как работает наследование:</p>
5 <p>Наследование записывается так: A extends B. Эта запись означает, что класс<em>A</em>наследует класс<em>B</em>. Теперь посмотрим, как работает наследование:</p>
6 <p>Внутри<em>HTMLAnchorElement</em>нет определения конструктора, но благодаря наследованию, этот класс имеет доступ ко всем свойствам суперкласса. JavaScript вызывает их автоматически при обращении к ним. В свою очередь, внутри toString() вызываются методы, которых нет в текущих классах, поэтому они также берутся из родительского класса.</p>
6 <p>Внутри<em>HTMLAnchorElement</em>нет определения конструктора, но благодаря наследованию, этот класс имеет доступ ко всем свойствам суперкласса. JavaScript вызывает их автоматически при обращении к ним. В свою очередь, внутри toString() вызываются методы, которых нет в текущих классах, поэтому они также берутся из родительского класса.</p>
7 <h2>Цепочка наследования</h2>
7 <h2>Цепочка наследования</h2>
8 <p>Наследование классов в JavaScript - одиночное. Другими словами, наследоваться можно только от одного класса. Точно так же как и в Java. Множественное наследование в этих языках было убрано специально, из-за его высокой сложности и проблем, которые оно добавляет (например, коллизии методов и свойств). С другой стороны, сама по себе цепочка наследования может быть сколь угодно глубокой:</p>
8 <p>Наследование классов в JavaScript - одиночное. Другими словами, наследоваться можно только от одного класса. Точно так же как и в Java. Множественное наследование в этих языках было убрано специально, из-за его высокой сложности и проблем, которые оно добавляет (например, коллизии методов и свойств). С другой стороны, сама по себе цепочка наследования может быть сколь угодно глубокой:</p>
9 <h2>Оператор проверки типа</h2>
9 <h2>Оператор проверки типа</h2>
10 <p>Оператор instanceof учитывает классы из цепочки наследования прототипов:</p>
10 <p>Оператор instanceof учитывает классы из цепочки наследования прототипов:</p>
11 <p>Не забывайте, что подобные проверки закрывают возможность использовать полиморфизм. Иногда без них не обойтись, но в подавляющем большинстве случаев лучше завязываться на интерфейс объекта.</p>
11 <p>Не забывайте, что подобные проверки закрывают возможность использовать полиморфизм. Иногда без них не обойтись, но в подавляющем большинстве случаев лучше завязываться на интерфейс объекта.</p>