下面是我最终使用的(我已经删除了很多用于自定义标记的代码,只留下了最基本的部分,所以我可能在编辑中犯了错误)。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"
});