Javascript对象属性在成员函数之外为null

时间:2016-08-07 15:35:47

标签: javascript json google-maps-api-3

我有一个我正在使用谷歌地图集成的网站。下面是一些显示布局的示例代码以及我遇到问题的地方,我认为它与范围相关,但无法弄清楚。一旦使用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

1 个答案:

答案 0 :(得分:1)

我相信当你在obj内使用refreshStuff时,它的obj等于{},在obj之前更新为具有刷新内容功能,如果你知道什么我的意思是。

事实上我是对的,证明:

https://jsfiddle.net/9szgwyru/