Всем привет! Сегодня мы поговорим о такой важной вещи, как объектно-ориентированное программирование и как его можно использовать в контексте разработки Windows Store JavaScript приложений.
Как правило, любая программа, выходящая по уровню сложности за рамки калькулятора, должна иметь определенную архитектуру, то есть определенный набор классов, компонентов и правил их взаимодействия.
Однако, исторически, в языке JavaScript, поддержка объектно-ориентированного программирования была очень слабой, поэтому сегодня существует множество библиотек, которые расширяют ядро языка, добавляя синтаксис для создания классов (Microsoft AJAX, CoffeScript, TypeScript и прочие).
Разработчики ядра WinJS прекрасно понимали, что для Windows 8 будут писаться отнюдь не простые приложения, поэтому предусмотрели возможности удобной работы с классами.
В этой статье мы познакомимся с основными приемами ООП на WinJS.
Для создания класса необходимо следовать следующему синтаксису.
1: var object = WinJS.Class.define(constructor, instanceMembers, staticMembers); Здесь вы можете задать конструктор, свойства и методы объекта, а также статические свойства и методы типа. Рассмотрим пример создания класса и его использования:
1: var Car = WinJS.Class.define(
2: function(name) {
3: this.modelName = name;
4: }, 5: {6: modelName: "",
7: getPrice: function() {
8: return 10;
9: } 10: }, 11: {12: canFly: false,
13: getAllModels: function() { }
14: } 15: );Для доступа к свойствам и методам объекта необходимо сначала создать объект класса. Доступ к статическим членам осуществляется через имя класса. Пример использования класса Car приведен ниже:
1: var o = new Car("BMW");
2: o.modelName; 3: o.getPrice(); 4: 5: Car.canFly; 6: Car.getAllModels();Наследование
Одно из основных понятий ООП - наследование. Объект потомок получает свойства и методы родителя. В WinJS это реализовано следующим образом:
1: var SportCar = WinJS.Class.derive(
2: 3: Car, // класс-родитель
4: 5: function () { }, // конструктор
6: 7: {8: sportVendor: "" // поле типа
9: }, 10: {11: getAllSportModels: function () { } // статический метод
12: } 13: ); 14: 15: var o = new SportCar("Mitsubishi Sport"); // конструктор родителя
16: o.modelName // поле родителя
17: o.sportVendor // поле потомкаТут вроде все понятно, объект класса потомка имеет доступ как к собственным полям и методам, так и к членам родительского класса. А вот дальше мы посмотри на кое-что оригинальное, чего вы не найдете в таких языках как C# или Java.
Смешивание
Как и во многих языках, в JavaScript не поддерживается множественное наследование. В WinJS предусмотрели функция для эмулирования такого поведения. При помощи следующего синтаксиса все поля и методы одного класса копируются в целевой класс.
1: WinJS.Class.mix(MyClass, ClassForImport);Данную функцию можно вызывать множество раз, интегрируя в свой класс любое количество других классов. Один из типичных сценариев использования – присоединение к своему классу объект WinJS.UI.DOMEventMixin. При этом ваш класс получает методы работы с событиями.
Пространства имен.
Также стоит обратить внимание на работу с пространствами имен. Совершенно недопустимо создавать все классы приложения в глобальном пространстве имен, тем самым превращая его в свалку.
Ядро WinJS предлагает нам две основные функции управления пространствами имен:
1) Объявление пространства имен.
1: WinJS.Namespace.define("AutoNamespace", {
2: Car: WinJS.Class.define(...) 3: });Все классы объявленные внутри объекта будут созданы в указанном пространстве имен. Чтобы создать объект такого класса необходимо использовать полный путь к нему, как показано ниже:
1: var o = new MyNamespace.Car("BMW");
2) Расширение существующих пространств имен. Такой сценарий бывает полезен при написании различных классов расширений/дополнений/утилит. Например, реализовав свой кастомный контрол, вполне логично поместить его в пространство имен WinJS.UI, как показано в примере ниже:
1: WinJS.Namespace.defineWithParent(WinJS.UI, "MyNamespace", {
2: Car: WinJS.Class.define(...) 3: });Теперь класс Car будет доступен по адресу: WinJS.UI.Car.
Итак, мы рассмотрели с вами все базовые вещи, которые относятся к ООП в WinJS. Спасибо, что дочитали до этого места :) Приятной разработки на платформе Windows 8!
А на сайте: www.superplayers1.ru можно посмотреть курс по созданию ка
ОтветитьУдалить