我有一个我正在使用谷歌地图集成的网站。下面是一些显示布局的示例代码以及我遇到问题的地方,我认为它与范围相关,但无法弄清楚。一旦使用API加载到任何东西,Maps API就会调用initMap(),但是我还需要obj成为一个全局变量,以便在initMap()完成后可以访问它并做一些事情。
var obj = {};
var initMap = function() {
obj = {
"map": null,
"locations": null,
"refreshStuff": function() {
// Do things to populate all the null values
// i.e.
obj.locations = [0,1,2,3,4,5];
alert(/*message to show values are what they should be*/); // They are
},
"otherThings": "otherThings"
};
obj.refreshStuff();
alert(/*message to check values are still what they should be*/); // They're null
};
alert(/*message to check values are still what they should be*/); // They're null
有没有理由说obj的null属性在设置它们的函数之外会恢复为null?
编辑1
成员vairables并不总是恢复为null,它们将恢复为最初的任何内容,我只是最初为所有这些使用null。
obj = {
"location_ex1": null,
"location_ex2": 0
};
alert(obj.location_ex1); // null
alert(obj.location_ex1); // 0
编辑2
以下是一个未正确设置值的函数的完整代码段
obj = {
// ...
"userLocationFirstRun": true,
"refreshUserLocation": function() {
if (navigator.geolocation) {
navigator.geolocation.getCurrentPosition(function(position) {
obj.userLocation.position = new google.maps.LatLng(position.coords.latitude, position.coords.longitude);
if (obj.userLocationFirstRun) {
obj.userLocationFirstRun = false;
obj.userLocation.marker = new google.maps.Marker({
map: obj.map,
position: obj.userLocation.position,
draggable: false,
icon: { url: "/images/location_marker.png" }
});
}
alert(JSON.stringify(obj.userLocation.position)); // <-- Correct coords
}, function() {
//Geolocation error - Service failed
alert("Geolocation service failed");
});
}
else {
//Geolocation error - No geolocation ability
alert("Geolocation service not available");
}
},
"userLocation": {
"marker": null,
"position": null,
}
// ...
};
obj.refreshUserLocation();
alert(JSON.stringify(obj.userLocation.position)); // <-- null
答案 0 :(得分:1)
我相信当你在obj
内使用refreshStuff
时,它的obj等于{},在obj
之前更新为具有刷新内容功能,如果你知道什么我的意思是。
事实上我是对的,证明: