我正在创建自定义结构类。通过结构代码查看我注意到了公共render()
方法以及私有_render()
方法。虽然我知道结构代码库中的下划线表示私有方法,但我不确定应该覆盖哪种方法。 render()
的公共版本和私有版本之间的关系是什么?为什么有两种不同的方法?我什么时候应该延长它们?
答案 0 :(得分:0)
render()
位于Object类中,用于绘制选择,转换ctx,设置阴影以及创建/重新绘制缓存画布。
虽然_render()
用于绘制特定对象,但在Circle类中,它会绘制一个圆圈。因此,如果您想根据自己的要求绘制内容,则需要覆盖特定类的_render()
。
<强> 样本 强>
var canvas = new fabric.Canvas('c');
fabric.Circle.prototype._render = function(ctx) {
ctx.beginPath();
ctx.arc(
0,
0,
this.radius,
this.startAngle,
this.endAngle, false);
this._renderPaintInOrder(ctx);
ctx.font="30px Arial";
ctx.fillText('Hi!', 0, 0);
};
canvas.add(new fabric.Circle({
radius: 120,
stroke: 'red',
fill: ''
}));
canvas {
border: 1px solid #999;
}
<script src="https://rawgit.com/kangax/fabric.js/master/dist/fabric.js"></script>
<canvas id="c" width="300" height="300"></canvas>