Всем привет! Сегодня мы поговорим о такой важной вещи, как объектно-ориентированное программирование и как его можно использовать в контексте разработки 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 можно посмотреть курс по созданию ка
ОтветитьУдалить