【问题标题】:How can I achieve multiple inheritance with fabricJS objects?如何使用 fabricJS 对象实现多重继承?
【发布时间】:2017-01-09 06:53:45
【问题描述】:

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

现在我想要拥有像 MyRectMyCircle 等应该继承自 MyObject 的特殊形状,因为它们应该共享由它提供的特色服务。

我正在努力制作例如MyRect,它继承自fabric.Rect,并且还使用MyObject 的道具,因为fabric.Rect 只是继承自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;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/fabric.js/1.6.4/fabric.min.js"></script>
<canvas id="c" width="400" height="300"></canvas>

【问题讨论】:

    标签: javascript inheritance fabricjs multiple-inheritance


    【解决方案1】:

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

    您可以只覆盖fabric.Object 中的值,或者创建一个具有一堆默认值的对象并将其传递给您的所有fabric.MyRectfabric.MyCircle 类。

    如果你能按照你的提议去做会很有趣,也许是feature you could propose to fabricjs directly

    【讨论】:

    • 我会在github上询问它是否真的没有办法真正做到这一点。
    • 您也可以从 Rect 的 repo 中复制类创建文件,然后传入您自己的对象类。我们在自己的项目中做过一些类似的事情。
    猜你喜欢
    • 2015-01-31
    • 1970-01-01
    • 2019-05-27
    • 1970-01-01
    • 2016-10-02
    • 2013-02-26
    • 2011-11-21
    • 2015-02-08
    • 1970-01-01
    相关资源
    最近更新 更多