0

オブジェクトの一部であるにもかかわらず、関数の外でアクセスしようとすると、「currentPos.LatLng」が定義されていない理由を誰かが説明してくれますか? 基本的に、現在の位置の値を取得して、別の関数で再度使用できるようにしようとしています。このようなものにはかなり新しい...前もって感謝します。

var map;
var infowindow;
var currentPos = {
};
var city = new google.maps.LatLng(60, -105);

function initialize() {
    map = new google.maps.Map(document.getElementById('map_canvas'), {
        mapTypeId: google.maps.MapTypeId.ROADMAP,
        center: city,
        zoom: 13
    });

    if(navigator.geolocation) {
        browserSupportFlag = true;
        navigator.geolocation.getCurrentPosition(
            function(position) {
                pos = new google.maps.LatLng(position.coords.latitude, position.coords.longitude);
                map.setCenter(pos);
                currentPos.LatLng = pos;
                console.log(currentPos.LatLng);
            }, 
            function() {
                handleNoGeolocation(true);
            }
        );          
    } else {
        handleNoGeolocation(false);
    }
    function handleNoGeolocation(errorFlag) {
        if (errorFlag) {
            var content = 'Error: The Geolocation service failed.';
        } else {
            var content = 'Error: Your browser doesn\'t support geolocation.';
        }
    }
    var request = {
                location: city,
                radius: 2500,
                types: ['store']
            };

    infowindow = new google.maps.InfoWindow();
    var service = new google.maps.places.PlacesService(map);
    service.search(request, callback);

    function callback(results, status) {
        if (status == google.maps.places.PlacesServiceStatus.OK) {
            for (var i = 0; i < results.length; i++) {
                createMarker(results[i]);
            }
        }
    }

    function createMarker(place) {
        var placeLoc = place.geometry.location;
        var marker = new google.maps.Marker({
            map: map,
            position: place.geometry.location
        });

        google.maps.event.addListener(marker, 'click', function() {
            infowindow.setContent(place.name);
            infowindow.open(map, this);
        });
    }
}

google.maps.event.addDomListener(window, 'load', initialize);   
console.log(currentPos.LatLng);
4

1 に答える 1

2

initializeログに記録しようとするまでに、まだ呼び出されていない/終了していないためです。

これ、または実際に実行しようとしているもの (またはデータcurrentPosが入力されるとアクセスする他の関数への呼び出し) を、コールバック内または割り当てた場所の後に移動する必要があります。

于 2012-09-08T05:50:03.723 に答える