util.defineClass

Статическая функция.

Базовая функция, реализующая объявление классов в API Яндекс.Карт. При помощи этой функции можно объявить новый класс, указать у этого класса набор методов и произвести наследование от другого класса.

К дочернему классу приписывается поле superclass, указывающее на прототип родительского класса. Через поле 'constructor' объекта 'superclass' можно обратится к конструктору родительского класса.

Возвращает класс.

{ Object } util.defineClass(constructor[, parentClass[, override]])

Параметры:

Параметр Значение по умолчанию Описание
constructor *

Тип: Function

Конструктор класса.

parentClass

Тип: Function

Родительский класс, от которого необходимо произвести наследование. Этот аргумент может быть пропущен.

override

Тип: Object

Набор дополнительных полей и функций, которые будут приписаны к прототипу класса. Источников может быть несколько (функция может иметь произвольное число параметров), данные копируются справа налево (последний аргумент имеет наивысший приоритет при копировании).

* Обязательный параметр/опция.

Примеры:

1.

// Объявление класса с методами.
var MyClass = ymaps.util.defineClass(function () {
        this.field = 'fieldValue';
    }, {
        doSomethingAwesome: function () {
            return 'methodResult';
        },
        stop: function () {}
    }),
    object = new MyClass();
console.log(object.field);
// 'fieldValue'  console.log(object.doSomethingAwesome()); 
// 'methodResult'

2.

// Реализуем собственный класс кнопки на основе наследования от базового класса кнопки.
&
#13;
// Нажатие на кнопку переключает тип тайлов карты.
var CustomControl = ymaps.util.defineClass(function () {
    // Задаем жесткий набор опций без возможности установки извне.
    var data = {
        data: {
            content: 'Изменить тип карты'
        },
        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();