向全局对象添加属性

时间:2016-03-17 21:00:54

标签: javascript jquery

我知道这是一个常见的问题,而且我是一名JS新手,但即使在搜索StackOverflow几个小时之后,我也完全难过了。

我正在使用Google Maps API,并希望通过与ID关联来跟踪我的标记。所以我将var pinArray = new Object()作为全局变量,并添加如下标记:

function CreateMarkers (data){              
        data.forEach(function(store) {          
            <!-- CREATE MAP MARKER -->
            var mapLat = store.latitude;
            var mapLong = store.longitude;
            var mapLatLng = { lat: parseFloat(mapLat), lng: parseFloat(mapLong) };                      
            var marker = new google.maps.Marker({
                position: mapLatLng,
                title: store.name,          
                icon: {
                    path: google.maps.SymbolPath.CIRCLE,
                    scale: 8.5,
                    fillColor: 'Green',
                    fillOpacity: 0.8,
                    strokeWeight: 0.6,
                },              
                zIndex: 0   
            });
            cluster.addMarker(marker);
            var key = store.Id;
            pinArray['${key}'] = marker;                        
        })
    }   

clustervar cluster = new MarkerClusterer(map);

当我尝试在函数外部执行console.log(pinArray);时,我得到一个空对象: Object {} 。我也尝试过不使用字符串插值,例如pinArray[store.Id] = marker;,但也遇到同样的问题。

我需要在引脚和ID之间保持这种全局关联,因为我需要在其他函数中通过ID来引用和更新标记。或者至少,我认为我这样做,我对其他方式持开放态度。非常感谢帮助;提前谢谢你。

2 个答案:

答案 0 :(得分:2)

通常,当我过去做过类似的事情时,我会使用标准的javascript数组而不是ID对象:

var pinArray = [];

然后使用push将标记添加到其中:

pinArray.push(Marker);

创建引脚时,可以在属性定义中包含密钥:

var marker = new google.maps.Marker({
            position: mapLatLng,
            title: store.name,          
            icon: {
                path: google.maps.SymbolPath.CIRCLE,
                scale: 8.5,
                fillColor: 'Green',
                fillOpacity: 0.8,
                strokeWeight: 0.6,
            },              
            zIndex: 0,
            key: store.Id
        });

如果您需要通过ID拉取它们,您可以编写一个简单的循环查找函数来查找单个地图标记。类似的东西:

function GetMarkerByKey(key) {
    var i = 0;
    while (pinArray[i].key != key) {i++}
    return pinArray[i];
}

此外,如果您在动态事件处理程序中使用它进行单击或悬停,则可以使用此属性来识别它们正在激活它的标记。

~~~编辑修复语法错误~~~

答案 1 :(得分:2)

var pinArray在其定义的函数范围内分配变量。无论您在函数中的哪个位置,确保将变量定义为全局变量的最安全方法是将其分配给window

window.pinArray = new Object();