ООП в ракурсе JavaScript

20-08-2019

Для эффективной работы вся логика JS логика должна быть оформлена в виде классов. И сразу же расставлю все точки над i: язык JavaScript является прекрасным объектно-ориентированным языком. Многие люди несправедливо называют язык JavaScript объектно-базированным или псевдо объектно-ориентированным. Причина тому – недостаточное знание вопроса. Отличие, которое всех смущает, состоит в том, что в JS нет привычного механизма наследования с помощью классов. Однако в JS есть другой, уникальный механизм наследования – прототипный. С его помощью можно легко реализовать привычный механизм – наследование с помощью классов. Вывод: JavaScript – это объектно-ориентированный язык с богатыми возможностями наследования.

Объявление класса

Как создать класс или что является его ближайшим аналогом в языке JavaScript? Для создания классов никакие вспомогательные функции не нужны. Новый класс – это просто функция. Её тело – конструктор класса:

var UISpinEdit = function() {};

Создание экземпляра класса

var uiSpinEdit = new UISpinEdit();

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

Очевидно, что у компонентов должна быть некая иерархия. В простейшем виде – это два уровня наследования: абстрактный класс-родитель инкапсулирующий общую для всех компонентов логику и его потомки реализующие специфичную логику для конкретного типа компонента.

var UIComponent = function() {}; var UISpinEdit = function() {}; // This way we inherit UISpinEdit from UIComponent UISpinEdit.prototype = new UIComponent();

В своих примерах я использую пустые конструкторы в классах, поэтому могу использовать самую простую и эффективную технику наследования, а именно SubClass.prototype = new SuperClass();. Если в вашей системе вы не можете гарантировать что у всех классов будут пустые конструкторы, то для обеспечения кроссбраузерного наследования вам стоит использовать специальный метод inherit, о котором я рассказываю в специальной статье Наследование в JavaScript. Кроме того, там объясняется почему в идеальной системе конструкторы должны быть пустыми.

Объявление методов класса

UISpinEdit.prototype.method1 = function(params) {/*body*/}; UISpinEdit.prototype.method2 = function(params) {/*body*/};


Смотрите также:
 Alcohol 120%
 Mozilla FireFox 8
 Лучшие звуки для QIP
 VkSaver
 Управление зависимостями

Добавить комментарий:
Введите ваше имя:

Комментарий:

Защита от спама - решите пример:


Онлайн-игры для социальных сетей:

Понравились обзоры? Читайте еще!

Новые обсуждения на форуме:

Парк аттракционов "Сегодня парки отдыха практически повсеместно вытесняются тематическими парками, хотя обычно эти два определения смешивают.."
Зачем надо учиться играть в шахматы? "Шахматы долгое время считались игрой королей и аристократов.."