2017-01-26 3 views
0

私はGoogleマップのAPIガイドを見て、このページのデモでは、実際に呼び出さずに、明らかにinitMap()内で定義された関数を使用していることに気付きました。私が見つけることができる唯一の関連情報は、変数として定義したり渡したりするときに、関数の最後に誤ってa()を追加している人ですが、ここでは起こりません。これらの関数はどのように実行されていますか?関数は定義時に実行されていますか? -JS

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

callbackパラメータを参照してください:

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 =を削除しても問題ありません。

Google Maps APIがinitMapに電話する方法を知っている場合は、Ericの答えをご覧ください。

+0

渡された要素ファインダを使ってコンストラクタ内の変数を設定すると、関連付けを介してページが設定されるということですか?単にオブジェクトを設定するだけで、関数は実際に呼び出し/実行されませんか? –

+0

私は今あなたが言っていることを見て、コンストラクタは単に新しいオブジェクトを作成するのではなく、マップを作成して適用することによって他の作業を行うことです - コンストラクタは新しく作成されたオブジェクト 'map'それは「新しい」を通して呼び出されています。正しい? –

+0

ええ、それは基本的にそれです。あなたはOO JSを読んでこれについてもっと知ることができます。 –

0

答えは、HTMLの中に隠されていますか?これは、ライブラリの読み込みが完了するとすぐに、initMapという名前のグローバルに定義された関数を呼び出すようにGoogleマップに指示します。

+0

initMap()がどのように呼び出されるのかは明らかですが、markerCluster()がどこで呼び出されたかはわかりません。 –

関連する問題