【发布时间】:2018-09-21 23:47:41
【问题描述】:
我正在创建一个自定义结构类。通过查看结构代码,我注意到一个公共 render() 方法以及一个私有 _render() 方法。虽然我知道结构代码库中的下划线表示私有方法,但我不确定应该覆盖什么方法。 render()的公版和私版有什么关系?为什么有两种不同的方法?我应该什么时候延长它们?
【问题讨论】:
标签: fabricjs
我正在创建一个自定义结构类。通过查看结构代码,我注意到一个公共 render() 方法以及一个私有 _render() 方法。虽然我知道结构代码库中的下划线表示私有方法,但我不确定应该覆盖什么方法。 render()的公版和私版有什么关系?为什么有两种不同的方法?我应该什么时候延长它们?
【问题讨论】:
标签: fabricjs
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>
【讨论】: