Итак, я пытаюсь расширить класс карт Google, в частности google.maps.OverlayView (в версии 3). Делая это, Vanilla JS полностью работает.
POIOverlay = function(marker, poi, type)
{
this._marker = marker;
this._poi = poi;
this._type = type;
this._div = null;
this.latlng_ = marker.getPosition();
this._map = marker.getMap();
this._offsetVertical = -195;
this._offsetHorizontal = 0;
this._height = 165;
this._width = 266;
}
POIOverlay.prototype = new google.maps.OverlayView();
POIOverlay.prototype.create = function()
{
console.log(this)
}
POIOverlay.prototype.draw = function()
{
//stuff
}
Однако, делая это способом прототипа, не удается добавить ни один из методов родительского класса:
POIOverlay = Class.create(new google.maps.OverlayView(), {
initialize : function(marker, poi, type)
{
this._marker = marker;
this._poi = poi;
this._type = type;
this._div = null;
this.latlng_ = marker.getPosition();
this._map = marker.getMap();
this._offsetVertical = -195;
this._offsetHorizontal = 0;
this._height = 165;
this._width = 266;
},
create : function()
{
if(this._div) return;
console.log(this);
},
draw : function()
{
//stuff
}
});
Вот код для создания экземпляра / использования класса:
try
{
poio = new POIOverlay(marker,poi,type);
}
catch(e)
{
console.log(e);
}
google.maps.event.addListener(marker, 'click',
poio.draw.bind(poio)
);
В первом примере консоль регистрирует объект с помощью родительских и дочерних методов / атрибутов. Во втором примере консоль регистрирует объект без родительских атрибутов / методов.
Очевидно, что это не слишком большая сделка, но мне было интересно, кто-нибудь еще сталкивался с этой проблемой и легко ли ее исправить. Я использую прототип 1.7.