Документация
Справочник JavaScript API
2.1.64 (текущая версия)
collection
interactivityModel
Интерфейсы

util.defineClass

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

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

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

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

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

Параметры:

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

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

]no-highlight]

Тип: 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();