工厂的角度继承

时间:2014-03-10 09:18:33

标签: javascript angularjs inheritance

在我目前的项目中,我第一次在前面使用角度,我在扩展“类”真正的工厂方面遇到了一些问题。

案例:我有3种类型的标记可以放在地图上。 指定的标记。 2.未分配的标记。 3.淘汰的标记。

我有一个基准标记对象

engine.factory('marker', ['map','icons', function (map, icons) {

 var Marker = function Marker() {};

 Marker.prototype.mouseover = function mouseover (e) {
  e.target.setIcon(this.icons[this.iconOnHover]);
 };

 Marker.prototype.mouseout = function mouseout (e) {
   e.target.setIcon(icons[this.icon]);
 };

return Marker;

}]);

现在我正在尝试制作平移标记

engine.factory('pannedMarker', ['map', 'marker', 'icons', function (map, marker, icons) {

 var PannedMarker = {};
 PannedMarker.prototype = new marker();

 return function PannedMarker(location, id) {
   this.id = id;
   this.location = location;
   this.icon = 'purple';
   this.iconOnHover = 'purpleHover';

   L.marker(this.location, {icon: icons.purple}).addTo(map.map)
   .on('mouseover', this.mouseover)
   .on('mouseout', this.mouseout);
  };
}]);

当我鼠标悬停在我的标记上时,我收到此错误:  未捕获的TypeError:无法调用未定义的方法'call'

我不太擅长js原型设计,我希望得到一些构造信息如何将其作为最佳实践来实现。因为我知道这不是正确的方法。

1 个答案:

答案 0 :(得分:1)

var PannedMarker = {};
PannedMarker.prototype = new marker();

这没有任何意义,因为对象没有原型属性(函数可以)。 之后你做了

return function PannedMarker(location, id) {

再次覆盖变量PannedMarker

这是一篇关于javascript继承的文章,也许有帮助:javascript inheritance

相关问题