Имитация классов с использованием средств Dojo

Теперь, когда вам была предоставлена возможность сравнить различные формы наследования, пришло время познакомиться с основной конструкцией в инструментальном наборе, которая используется для объявления классов и имитации иерархий наследования. Инструментарий Dojo обеспечивает максимальную простоту, скрывая все особенности реализации, связанные с объявлением классов и наследованием, за маленькой и элегантной функцией в библиотеке Base, которая называется dojo.declare. Эту функцию легко запомнить, потому что с ее помощью выполняется объявление (declaring) класса.

В примере 10.5 показано, как можно использовать функцию dojo.declare для создания иерархии наследования между фигурой и окружностью. Пока рассмотрим этот пример без привязки к реальности, а наиболее интересные его моменты обсудим немного ниже.

Пример 10.5. Имитация наследования классов с помощью dojo.declare
// "Объявить" класс Shape
dojo.declare(
"Shape", //Имя класса
null, //Предков нет, поэтому указано значение null
{
centerX : 0, // Атрибуты
centerY : 0,
color : "",
// Функция-конструктор, которая вызывается как "new Shape"
constructor: function(centerX, centerY, color)
{
this.centerX = centerX;
this.centerY = centerY;
this.color = color;
}
}
);
// К этому моменту можно было бы создать экземпляр объекта:
// var s = new Shape(10, 20, "blue");
// "Объявить" класс Circle
dojo.declare(
"Circle", //Имя класса
Shape, //Класс-предок
{
radius : 0,
// Функция-конструктор, которая вызывается как "new Circle"
constructor: function(centerX, centerY, color, radius)
{
// Конструктор класса Shape будет вызван автоматически
// с теми же аргументами.


Обратите внимание, что он
// просто проигнорирует аргумент radius, потому
// что использует только первые три аргумента
this.radius = radius; //присвоить значение свойству класса Circle
}
}
);
// Функции-конструктору параметры передаются через
// конструктор dojo.declare
c = new Circle(10,20,"blue",2);

Хотелось бы надеяться, что вы находите использование функции dojo.declare удобочитаемым, простым и вполне очевидным. В зависимости от того, как вы используете отступы и разрывы строк, объявление класса может даже «напоминать» обычные объектноориентированные языки. Единственное, что может показаться странным, – это то, что конструктор класса Shape вызывается с теми же параметрами, которые передаются функции constructor класса Circle. Однако это не влечет за собой никаких проблем, так как функция constructor класса Shape принимает только три именованных аргумента, попросту игнорируя любые дополнительные аргументы. (К этому мы вскоре еще вернемся.)

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

Статьи из раздела Dojo на эту тему:
JavaScript – это не Java
Вызов унаследованных методов
Множественное наследование посредством смешивания классов
Наследование в JavaScript
Основной шаблон создания класса