Почему отсутствуют методы отображения листовки?

#leaflet

#листовка

Вопрос:

Я создал карту листовки, вызвав var map = L.map('leaflet', options); , но это просто делает объект полным частных значений с префиксом подчеркивания:

 Object.keys(map) === ["options", "_container", "_leaflet_id", "_containerId", `"_fadeAnimated", "_panes", "_paneRenderers", "_mapPane", "_controlCorners", "_controlContainer", "_onResize", "_targets", "_events", "_zoom", "_loaded", "_lastCenter", "_size", "_sizeChanged", "_pixelOrigin", "_firingCount", "_handlers", "_layers", "_zoomBoundLayers", "_initHooksCalled", "dragging", "doubleClickZoom", "scrollWheelZoom", "touchZoom", "boxZoom", "keyboard", "_zoomAnimated", "_proxy", "_layersMaxZoom", "_layersMinZoom"]`
  

Карта все еще отображается. Ошибка консоли отсутствует. Но я не могу вызывать такие вещи, как map.getCenter() или map.getContainer() , потому что эти методы не существуют map . Почему эти методы не включены map ?

Комментарии:

1. Можете ли вы воспроизвести свою проблему в jsfiddle или plnkr?

Ответ №1:

Помните, что Object.keys возвращает только перечислимые собственные свойства объекта.

По определению, методы должны наследоваться от класса, а не быть собственными свойствами.

В JavaScript (ES5) нет формального «класса», поэтому он переводится как «методы, которые будут унаследованы от прототипа«. Но все еще не владеют свойствами.

Leaflet хорошо справляется с этой практикой.

Например, вместо анализа Object.keys(map) , непосредственно просмотрите map (в современных браузерах, таких как Firefox, выполнение console.log(map) даст вам возможность развернуть объект) и выполните поиск __proto__ (может быть последним элементом): это ссылка на прототип, в котором правильно перечислены методы, такие как getCenter и getContainer .

Демонстрация: https://jsfiddle.net/y63u5utf/7 /

Комментарии:

1. Да, спасибо, я чувствую себя немного глупо, задавая этот вопрос. Я оставлю это на случай, если это поможет кому-то еще.