如何使用fabricJS对象实现多重继承?

时间:2016-09-01 11:44:07

标签: javascript inheritance fabricjs multiple-inheritance

我想创建一个新的fabric.MyObject,它只是一个fabric.Object,但有一些特殊的道具和方法。所以我创建的fabric.MyObject只需在initialize上调用fabric.Object,一切都很好。

现在我希望有MyRectMyCircle之类的特殊形状,应该从MyObject继承,因为它们应该分享它所提供的特色。

我是如何制作例如MyRect继承自fabric.Rect而且使用MyObject的道具fabric.Rect只是继承自{{} 1}}(我不想改变它,因为我可能需要"正常" rects也是如此)。

一些提示将不胜感激:)



fabric.Object

var canvas = new fabric.Canvas("c");

//create new object that has some defaults changed
fabric.MyObject = fabric.util.createClass(fabric.Object, {
    type: "myObject",
    
    initialize: function (options) {
  	this.callSuper("initialize", fabric.util.object.extend({
    	    hasControls: true,
            cornerColor: "black",
            transparentCorners: false,
            hasBorders: false,
            fill: "rgba(255,0,0,.5)",
            stroke: "black",
            perPixelTargetFind: true
        }, options));
  }
});

//create new rect that builds up on the custom MyObject
fabric.MyRect = fabric.util.createClass(fabric.Rect, {
    type: "myRect",
	
    initialize: function (options) {
  	//how can I make it work that fabric.Rect is not using fabric.Object but fabric.MyObject instead?
        this.callSuper("initialize", options);
    }
});

//creates just a "normal" rect
canvas.add(new fabric.MyRect({
  left: 100,
  top: 100,
  width: 100,
  height: 100
}));

canvas {
  border: 1px solid;
}




1 个答案:

答案 0 :(得分:2)

我认为没有一种直接的方法可以做到这一点。使用fabric.util.createClass来调用fabric.Object

要么可以覆盖fabric.Object中的值,要么创建一个包含一堆默认值的对象,并将其传递到所有fabric.MyRectfabric.MyCircle类中。

如果你能做你提出的建议并且可能是feature you could propose to fabricjs directly,那将会很有趣。