Javascript原型问题(使用谷歌地图)

时间:2013-06-14 14:50:35

标签: javascript google-maps prototype

我正在尝试编写一个干净的GoogleMap.js脚本。 我创建了一个包含gMarker和gInfoWindow的js类,我想在其原型(共享)中设置一个“openedInfoWindow”属性,所以我可以关闭它并在用户点击特定的gMarker时随时更改它而不将其声明为全局。

function gMarkerWInfo(gMarker,gInfoWindow){
    if(!gMarker || !gInfoWindow)
        return null;
    this.Marker = gMarker;
    this.InfoWindow = gInfoWindow;
}

gMarkerWInfo.prototype.openedInfoWindow = null;

gMarkerWInfo.prototype.openInfoWindow = function(){
    if(this.openedInfoWindow){
        alert(this.openedInfoWindow.getContent());
        //openedInfoWindow.close();
    }
    this.InfoWindow.open(this.Marker.getMap(),this.Marker);
    this.openedInfoWindow = this.InfoWindow;
}

“警报”用于调试目的,每次点击它时,它会向我显示InfoWindow的内容“链接”到我刚刚点击的gMarker。所以“opensInfoWindow”并不是我希望的。 任何人都可以帮助我吗?

PS。这是我用来在“GoogleMap”类中创建gMarkerWInfo的函数:

this.createMarkerWInfo = function(LatLng,Name,HTML_Infos){
    var gMarker = new google.maps.Marker({  position: LatLng,
                                            animation: this.MarkerAnimation,
                                            map: priv_Map,
                                            title: Name
                                        });
    var gInfoWindow = new google.maps.InfoWindow({content:HTML_Infos});
    var gMarkerWInfoWindow = new gMarkerWInfo(gMarker,gInfoWindow);
    google.maps.event.addListener(gMarker,'click', function() {gMarkerWInfoWindow.openInfoWindow();});
    return gMarkerWInfoWindow;
}

1 个答案:

答案 0 :(得分:-1)

阅读this article我发现了这一点:“定义:函数的prototype属性是将被指定为创建的所有实例的原型的对象。[...]了解这一点非常重要函数的原型属性与其实际原型无关。

所以我明白我之前尝试使用的Object.prototypeFunction.prototype不一样,符合我的兴趣。

所以这就是,最后工作:

function gMarkerWInfo(gMarker,gInfoWindow){...}

gMarkerWInfo.prototype.openedInfoWindow = null;

gMarkerWInfo.prototype.openInfoWindow = function(){
   if(gMarkerWInfo.openedInfoWindow)
           gMarkerWInfo.openedInfoWindow.close();
    this.InfoWindow.open(this.Marker.getMap(),this.Marker);
    gMarkerWInfo.openedInfoWindow = this.InfoWindow;
}