util.defineClass
Статическая функция.
Базовая функция, реализующая объявление классов в API Яндекс Карт. При помощи этой функции можно объявить новый класс, указать у этого класса набор методов и произвести наследование от другого класса.
К дочернему классу приписывается поле superclass, указывающее на прототип родительского класса. Через поле 'constructor' объекта 'superclass' можно обратится к конструктору родительского класса.
Возвращает класс.
{ Object } util.defineClass(constructor[, parentClass[, override]])
Параметры:
Параметр |
Значение по умолчанию |
Описание |
— |
Тип: Function Конструктор класса. |
|
— |
Тип: Function Родительский класс, от которого необходимо произвести наследование. Этот аргумент может быть пропущен. |
|
— |
Тип: Object Набор дополнительных полей и функций, которые будут приписаны к прототипу класса. Источников может быть несколько (функция может иметь произвольное число параметров), данные копируются справа налево (последний аргумент имеет наивысший приоритет при копировании). |
* Обязательный параметр/опция.
Примеры:
1.
// Объявление класса с методами.
var MyClass = ymaps.util.defineClass(function () {
this.field = 'fieldValue';
}, {
doSomethingAwesome: function () {
return 'methodResult';
},
stop: function () {
//...
}
});
var object = new MyClass();
console.log(object.field); // 'fieldValue'
console.log(object.doSomethingAwesome()); // 'methodResult'
2.
// Реализуем собственный класс кнопки на основе наследования от базового класса кнопки.
// Нажатие на кнопку переключает тип тайлов карты.
var CustomControl = ymaps.util.defineClass(function () {
// Задаем жесткий набор опций без возможности установки извне.
var data = {
data: { content: 'Change the map type' },
options: {
selectOnClick: false,
maxWidth: 150
}
};
CustomControl.superclass.constructor.call(this, data);
}, ymaps.control.Button, {
// Определим список методов класса.
// Переопределяем методы кнопки enable и disable.
enable: function () {
// Нужно обязательно вызывать методы базового класса,
// чтобы не нарушить логику работы кнопки.
CustomControl.superclass.enable.call(this);
// Включение и отключение поведения кнопок.
this.events.add('click', this.switchType, this);
},
disable: function () {
this.events.remove('click', this.switchType, this);
CustomControl.superclass.disable.call(this);
},
// Создаем наши собственные методы.
switchType: function () {
var map = this.getMap();
if (map) {
if (map.getType() == 'yandex#map') {
this.setSatelliteMapType();
} else {
this.setSchemeMapType();
}
}
},
setSchemeMapType: function () {
var map = this.getMap();
if (map) {
map.setType('yandex#map');
}
},
setSatelliteMapType: function () {
var map = this.getMap();
if (map) {
map.setType('yandex#satellite');
}
}
});
// Создание экземпляра нового класса и добавление его на карту.
var typeSwitcherButton = new CustomControl();
// В этом примере код создания карты был опущен.
myMap.controls.add(typeSwitcherButton);
// Вызов метода экземпляра класса.
typeSwitcherButton.setSatelliteMapType();
Обязательный параметр.