Ниже приведено то, что я в конечном итоге использовал (я убрал много кода, который я использовал для своего пользовательского маркера, чтобы оставить только голые кости, чтобы я мог ошибиться при редактировании). newObj () - это функция (основанная на коде Дугласа Крокфорда) для генерации нового объекта из прототипа вместо использования функции конструктора.
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"
});