2017-01-26 2 views
0

Я просматриваю руководства API карт Google и заметил, что демо на этой странице: https://developers.google.com/maps/documentation/javascript/marker-clustering использует функции, определенные внутри initMap(), по-видимому, без их фактического вызова. Единственная связанная информация, которую я могу найти, - это люди, ошибочно добавляющие() в конце функции при определении или передаче как переменной, но я не вижу, что это происходит здесь - Как выполняются эти функции?Функции, выполняемые при определении? -JS

function initMap() { 

    var map = new google.maps.Map(document.getElementById('map'), { 
    zoom: 3, 
    center: {lat: -28.024, lng: 140.887} 
    }); 

    // Create an array of alphabetical characters used to label the markers. 
    var labels = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'; 

    // Add some markers to the map. 
    // Note: The code uses the JavaScript Array.prototype.map() method to 
    // create an array of markers based on a given "locations" array. 
    // The map() method here has nothing to do with the Google Maps API. 
    var markers = locations.map(function(location, i) { 
    return new google.maps.Marker({ 
     position: location, 
     label: labels[i % labels.length] 
    }); 
    }); 

    // Add a marker clusterer to manage the markers. 
    var markerCluster = new MarkerClusterer(map, markers, 
     {imagePath: 'https://developers.google.com/maps/documentation/javascript/examples/markerclusterer/m'}); 
} 

ответ

0

Код создает новые объекты, проходящие вдоль существующих. Например, когда объявляется map, код вызывает new google.maps.Map(...), проходящий вдоль document.getElementById('map'). Конструктор объекта Map создает карту и отображает ее внутри элемента. Эта переменная действительно не нужна, кроме как позже, когда добавляются маркеры.

Вы можете удалить var markerCluster = из приведенного выше кода, и он все равно будет работать нормально.

Если у вас есть вопрос, как API Google Maps знает, как позвонить initMap, см. Ответ Эрика.

+0

Вы говорите, что установка варов в конструкторе с помощью проходованного элемента finder задает страницу посредством ассоциации/просто настройка объекта выполняет работу, а функция фактически не вызывает/выполняет? –

+0

Я думаю, что теперь вижу, что вы сейчас говорите, конструктор не просто создает новый объект, но и выполняет другую работу, создавая и применяя карту - конструктор - это функция на работе, а не только что созданный объект «карта», и его называют «новым». Верный? –

+0

Да, это в основном это. Вы можете ознакомиться с OO JS, чтобы узнать больше об этом. –

0

Ответ скрыт в HTML:

<script async defer 
    src="https://maps.googleapis.com/maps/api/js?key=YOUR_API_KEY&callback=initMap"> 

Смотрите параметр callback? Это говорит, что Google Maps вызывает глобально определенную функцию с именем initMap, как только библиотека будет загружена.

+0

Понятно, как вызывается initMap(), но я не понимаю, где, например, вызывается markerCluster(). –

Смежные вопросы