#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. Да, спасибо, я чувствую себя немного глупо, задавая этот вопрос. Я оставлю это на случай, если это поможет кому-то еще.