2017-01-26 5 views
0

Ich gehe durch die Google Maps API-Handbücher und habe festgestellt, dass die Demo auf dieser Seite: https://developers.google.com/maps/documentation/javascript/marker-clustering die in initMap() definierten Funktionen verwendet, ohne sie tatsächlich aufzurufen. Die einzige damit zusammenhängende Information, die ich finden kann, ist, dass Leute am Ende einer Funktion irrtümlich ein() hinzufügen, wenn ich eine Variable definiere oder überlasse, aber ich sehe das hier nicht - Wie werden diese Funktionen ausgeführt?Funktionen werden bei Definition ausgeführt? -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'}); 
} 

Antwort

0

Der Code erstellt neue Objekte und übergibt vorhandene. Zum Beispiel, wenn map deklariert ist, ruft der Code new google.maps.Map(...), document.getElementById('map') übergeben. Der Konstruktor des Objekts Map erstellt die Karte und zeigt sie im Element an. Die Variable wird nicht wirklich benötigt, außer später, wenn die Marker hinzugefügt werden.

Sie könnten tatsächlich var markerCluster = aus dem obigen Code entfernen und es würde immer noch gut funktionieren.

Wenn Sie wissen, wie das Google Maps-API initMap aufrufen kann, lesen Sie Eric's Antwort.

+0

Willst du sagen, dass das Setzen der Vars im Konstruktor mit dem übergebenen Elementfinder die Seite durch Assoziation aufstellt/das Einrichten des Objekts funktioniert und die Funktion nicht wirklich aufruft/ausführt? –

+0

Ich denke, ich sehe, was Sie jetzt sagen, der Konstruktor erstellt nicht nur ein neues Objekt, sondern andere Arbeit durch Erstellen und Anwenden der Karte - der Konstruktor ist die Funktion bei der Arbeit, nicht das neu erstellte Objekt 'map' und es wird durch 'neu' aufgerufen. Richtig? –

+0

Ja, das ist es im Grunde genommen. Sie können auf OO JS nachlesen, um mehr darüber zu erfahren. –

0

Die Antwort ist in der HTML versteckt:

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

Siehe callback Parameter? Das fordert Google Maps auf, eine global definierte Funktion namens initMap aufzurufen, sobald die Bibliothek geladen ist.

+0

Es ist klar, wie initMap() aufgerufen wird, aber ich verstehe nicht, wo zum Beispiel markerCluster() aufgerufen wird. –

Verwandte Themen