所以,我正在尝试扩展一个谷歌地图类,特别是google.maps.OverlayView(在v3中)。这样做的香草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。
答案 0 :(得分:2)
超类参数需要是一个合适的原型“类” - 请记住,JavaScript中并不存在类。 JavaScript有几种经典的继承模式,您应该能够通过手动代理构造函数和原型来获取原型链(包括对父“类”及其原型的引用)。
[[Class.create]]接受两种参数。如果第一个参数是 a [[Class]],它被用作新类的超类,以及它的全部 方法是继承的。否则,传递的任何参数都被视为 对象及其方法作为实例方法复制(“混入”) 新课程。