Итак, я пытаюсь расширить класс карт google, в частности google.maps.OverlayView (в версии 3). Выполнение этого метода vanilla js полностью работает.Prototype Class.create не подклассы правильно
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.
Интересно, должен ли родительский класс быть создан с помощью собственной системы Prototype? – Pointy