TypeScript — Классы

TypeScript — Классы

От автора: TypeScript — это объектно-ориентированный JavaScript. TypeScript поддерживает такие функции объектно-ориентированного программирования как классы, интерфейсы и так далее. Класс в контексте ООП — это макет для создания объектов. Класс инкапсулирует данные для объекта. Typescript предоставляет встроенную поддержку классов. JavaScript ES5 или более ранние этого не делали. В Typescript классы поддерживаются, он получил эту функцию от ES6.

Создание классов

Чтобы объявить в TypeScript класс, нужно использовать ключевое слово class. Синтасис для него приведён ниже:

Синтаксис

После ключевого слова class следует имя класса. Когда вы называете класс, нужно учитывать правила идентификаторов. Определение класса может включать следующее:

Поля − Поле — это любая переменная, объявленная в классе. Поля представляют данные, принадлежащие объектам.

Конструкторы − Отвечают за присвоение памяти объектам класса.

Функции − Функции представляют действия, которые может предпринять объект.. Иногда они также рассматриваются, как методы.

Вместе эти компоненты именуются членами данных класса. Рассмотрим класс Person в typescript.

После компиляции мы получим следующий JavaScript код:

Пример: Объявление класса

Здесь мы объявляем класс Car. Этот класс имеет поле под названием engine. Ключевое слово var не используется во время объявления поля. Вышеприведённый пример объявляет конструктор для класса.

Конструктор — это специальная функция класса, ответственная за инициализацию переменных класса. TypeScript определяет конструктор используя ключевое слово constructor. Конструктор — это функция, а значит она может быть параметризованной.
Ключевое слово this обозначает текущий экземпляр класса. В нашем случае имя параметра и имя поля класса одинаковы. В результате, чтобы избежать неоднозначности, к полю класса добавляется префикс — ключевое слово this.

disp() — это простое определение функции. Учтите, что в этой ситуации не используется ключевое слово function. После компиляции мы получим следующий JavaScript код:

Создание объектов-экземпляров

Чтобы создать экземпляр класса, используйте ключевое слово new, после которого следует имя класса. Синтасис для него приведён ниже:

Синтаксис

Ключевое слово new отвечает за конкретизацию.

Правая сторона выражения вызывает конструктор. Если конструктор параметризованный, то ему должны быть переданы значения.

Пример: конкретизация класса

Доступ к атрибутам и функциям

Получить доступ к атрибутам и функциям класса можно через объект. Используйте точечную нотацию «.» (точку), чтобы получить доступ к членам данных класса.

Пример: складываем все вместе

После компиляции мы получим следующий код JavaScript:

Результат выглядит следующим образом:

Наследование класса

TypeScript поддерживает наследование. Наследование — это способность программы создавать новые классы из уже существующего класса. Класс, расширенный, чтобы создать новые классы, называется родительным классом / супер классом. Новые классы называются дочерними классами / подклассами.

Класс наследует от другого класса используя ключевое слово extends. Дочерние классы наследуют от родительного класса все свойства и методы, кроме скрытых членов и конструкторов.

Синтаксис

Однако, TypeScript не поддерживает множественное наследование. Пример: Наследование класса

После компиляции мы получим следующий код JavaScript:

Результат выглядит следующим образом:

В приведённом выше примере мы объявляем класс Shape. Этот класс расширен с помощью класса Circle. Поскольку классы находятся в отношениях наследования, дочерний класс, то есть класс Car получает неявный доступ к атрибуту его родительного класса, то есть area. Наследование может быть:

Единичным − Каждый класс может расширяться только от одного родительного класса

Множественным − Класс может наследоваться от множества классов. TypeScript не поддерживает множественное наследование.

Многоуровневое − Следующий пример демонстрирует принцип многоуровневого наследования.

Пример

Класс Leaf выводит атрибуты из классов Root и Child в силу действия многоуровневого наследования. После компиляции мы получим следующий код JavaScript:

Результат выглядит следующим образом:

TypeScript ─ Наследование класса и предопределение методов

Предопределение методов — это механизм, благодаря которому дочерний класс предопределяет метод суперкласса. Следующий пример иллюстрирует этот механизм:

Ключевое слово super используется для обозначения прямого родителя класса. Это ключевое слово можно использовать для обращения к версии переменной, свойства или метода супер класса. Строка 13 вызывает версию функции doWork() супер класса. После компиляции мы получим следующий код JavaScript:

Результат выглядит следующим образом:

Ключевое слово static

Ключевое слово static можно применять к членам данных класса. Статическая переменная хранит его значения до тех пор, пока программа не закончит выполнение. Сослаться на статические члены можно с помощью имени класса. Пример

После компиляции мы получим следующий код JavaScript:

Результат выглядит следующим образом:

Оператор instanceof

Оператор instanceof возвращает true , если объект принадлежит к указанному типу. Пример

После компиляции мы получим следующий JavaScript код:

Результат выглядит следующим образом:

Скрытие данных

Класс может контролировать видимость его членов данных по отношению к членам других классов. Эта способность называется скрытием данных или инкапсуляцией.

Объектная ориентированность использует концепцию модификаторов или спецификаторов доступа, чтобы реализовать инкапсуляцию. Спецификаторы/модификаторы доступа определяют видимость членов данных класса вне определяющего их класса. Модификаторы доступа, поддерживаемые TypeScript:

публичные — Публичные члены данных имеют универсальную доступность. Члены данных в классе являются публичными по умолчанию.

закрытые — Закрытые члены данных доступны только внутри класса, который определяет эти члены. Если внешний член класса пытается получить доступ к закрытому члену, компилятор выдаёт ошибку.

защищённые — Защищённый член данных доступен для членов внутри того же класса, а также для членов дочерних классов.

Давайте рассмотрим на примере, как работает скрытие данных:

Этот класс имеет 2 атрибута строки: str1 и str2, которые являются публичными и закрытыми членами соответственно. Класс конкретизирован. Пример возвращает ошибку компиляции, так как к закрытому атрибуту str2 запрашивается доступ из-за пределов класса, который его объявляет.

Классы и интерфейсы

Классы также могут реализовать интерфейсы.

Класс AgriLoan реализует интерфейсы Loan. В результате, класс обязательно должен включать свойство interest в качестве его члена. После компиляции мы получим следующий JavaScript код:

Результат выглядит следующим образом:

Источник: //www.tutorialspoint.com/

Редакция: Команда webformyself.

Метки:

Похожие статьи:

Комментарии Вконтакте: