Объектно-ориентированное программирование (ООП)

JavaScript – это язык, основанный на объектах, но он не является объектно?ориентированным (ООП) языком. В JavaScript есть некоторые аспекты, напоминающие ООП, но поддержка возможностей, обычных для ООП, весьма ограничена. Например, область видимости членов класса (public, private, protected и прочие) может быть реализована с существенными ограничениями. Однако в JavaScript есть возможность создавать классы и даже имеется рудиментарная поддержка механизма наследования.

Классы в JavaScript реализуются в виде функций. Программный код внутри этих функций – это реализация конструктора класса. Она должна содержать объявления и определения всех элементов экземпляров (то есть всех общедоступных и частных свойств и методов). Для ссылки на текущий экземпляр класса можно использовать ключевое слово this, благодаря чему конструктор – и методы класса – получают доступ к свойствам текущего класса. Точно так же программный код класса имеет возможность присваивать свойства значениям и определять методы, которые затем будут доступны из программного кода за
пределами класса.

В примере 2.9 показан простой класс, который реализует абстракцию книги. Обратите внимание: нами предусмотрено хранение данных в частных свойствах класса, которые недоступны извне класса.


Далее, мы определяем общедоступные методы чтения и записи для доступа к этим свойствам. Такой прием называется инкапсуляцией и позволяет унифицировать доступ к свойствам и организовать проверку значений до того, как они будут записаны в свойства.

Пример 2.9. Использование ООП?особенностей JavaScript JavaScript?class.htm

"http://www.w3.org/TR/xhtml1/DTD/xhtml1?transitional.dtd">
JavaScript

(body)

(/body)


Данный пример выведет следующий текст:
National Geographic: Atlas of the World (0792275438)

Поскольку JavaScript не поддерживает модификаторы доступа (такие как private, protected и public в языке C#), для реализации частных свойств мы используем локальные переменные.


Как уже говорилось, все свойства экземпляров, инициализированные с помощью ключевого слова this, будут доступны из?за пределов класса, а переменные, объявленные внутри класса, останутся частными. Частные переменные могут использоваться только внутри класса и не видны внешнему программному коду. Это единственный способ реализовать сокрытие данных и определить некое подобие частных свойств и методов. Механизм наследования в JavaScript также имеет ограниченные возможности. Для определения свойств и методов, которые будут доступны всем экземплярам классов?наследников, можно использовать свойство prototype. Следующий фрагмент добавит новый метод ко всем массивам:

Array.prototype.empty = function() {
this.length = 0;
}

Следующее выражение определяет класс, наследующий свойства и методы другого класса:
DerivedClass.prototype = new BaseClass();

В примере 2.10 выполняется расширение класса Book с помощью класса DigitalBook, в котором объявляется дополнительное частное поле (реализованное в виде локальной переменной _size, обратиться к которой можно через методы доступа) и переопределяется метод toString().

Обратите внимание: в JavaScript нет защищенных свойств (свойства, которые доступны из подклассов), поэтому все поля?переменные базового класса необходимо объявлять повторно.


(«Подкласс» представлен здесь в контексте JavaScript – поскольку в этом языке программирования отсутствует «настоящий» механизм наследования ООП, то нет и самого понятия подкласса, но у вас имеется возможность определить похожее поведение, как это сделано в данном примере.) Однако существующие методы get и set будут доступны по?прежнему. Для доступа к этим методам необходимо использовать метод call() базового объекта (напоминает обращение к base в классах C#).

Пример 2.10. Использование механизма наследования в JavaScript

JavaScript?class?prototype.htm
"http://www.w3.org/TR/xhtml1/DTD/xhtml1?transitional.dtd">
JavaScript

(body)

(/body)
(/html)

Оцените статью: (0 голосов)
0 5 0

Статьи из раздела ASP.NET AJAX на эту тему:
Встроенные методы, собственные функции и обработка событий
Доступ к произвольным элементам
Доступ к элементам страницы
Доступ к элементам формы
Массивы в JavaScript

Вернуться в раздел: ASP.NET AJAX / JavaScript