为什么Leaflet的地图方法缺失?

时间:2016-10-09 10:14:18

标签: leaflet

我通过调用var map = L.map('leaflet', options);创建了一个Leaflet映射,但这只是使一个对象充满了以下划线为前缀的私有值:

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 个答案:

答案 0 :(得分:3)

请记住,Object.keys仅返回对象的可枚举拥有属性。

根据定义,方法应该从类继承,而不是拥有属性。

在JavaScript(ES5)中,没有正式的"类",因此它转换为"方法继承自原型"。但仍然不是拥有属性。

Leaflet做得很好,因为它尊重这种做法。

例如,不是分析Object.keys(map),而是直接查看map(在像Firefox这样的现代浏览器中,执行console.log(map)将使您能够扩展对象)并搜索{ {1}}(可能是最后一项):这是原型的链接,正确列出了__proto__getCenter等方法。

演示:https://jsfiddle.net/y63u5utf/7/