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 () {
        //...
    }
});
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();
Предыдущая
Следующая