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.

// Реализуем собственный класс кнопки на основе наследования от базового класса кнопки.
// Кнопка по нажатию переключает тип тайлов карты.
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();