扩展google.maps.Marker

时间:2010-12-09 17:40:34

标签: javascript google-maps inheritance prototype marker

我发现这个很棒的教程可以在v2谷歌地图中扩展GMarkers:http://www.googlemapsbook.com/2007/01/22/extending-gmarker/

不幸的是,在第3版中,标记的设置是非常不同的(例如,您必须传入地图,它将被添加为参数,因此无法使用独立的google.maps.Marker对象进行操作作为原型,或者至少在地图初始化之后才开始。)

有谁知道如何扩展谷歌地图v3标记?

*编辑 - 事实证明我错误地将地图作为必需参数。我稍后会将我的v3扩展名作为回答发布,并将其标记为社区问题

1 个答案:

答案 0 :(得分:1)

下面是我最终使用的内容(我已经删除了很多用于我的自定义标记的代码,只留下裸骨,所以我可能在编辑时犯了错误)。 newObj()是一个函数(基于Douglas Crockford的代码),用于从原型生成新对象,而不是使用构造函数。

function newObj(o) {
    var params = Array.prototype.slice.call(arguments,1);
    function F() {}
    F.prototype = o;
    var obj = new F();
    if(params.length) {
        obj.init.apply(obj,params);
    }
    return obj;
}

var MyMarkerProto = function() {
    var proto  = new google.maps.Marker(new google.maps.LatLng(0, 0));

    proto.init = function (data) {
        this.setPosition(new google.maps.LatLng(parseFloat(data.lat), parseFloat(data.lng)));
    }
    return proto;

}();

var myMarker = newObj(MyMarkerProto, {
    lat: 51,
    lng: 48,
    otherData: "some other value"
});