私はそのように呼び出すことができるキャンバスオブジェクトを持っています
var canvas = new Canvas();
キャンバス オブジェクトのプロトタイプにも多くの機能があります。setWidth
このオブジェクトは基本的に、getContext
などのいくつかの関数を使用して canvas 要素を作成します。
Layer
基本的に機能が追加されたキャンバスであるオブジェクトもあります。Layer
のプロトタイプをに設定するのは良い考えだと思いましたCanvas
。これはうまく機能し、すべてが良好でした。
各レイヤーには独自のキャンバスが必要なため、複数のレイヤーを使用するときに問題が発生します。ただし、キャンバスは Layers プロトタイプであるため、プロトタイプは 1 つのキャンバス要素のみを指します。そのため、複数のレイヤーの使用を開始すると、レイヤー プロトタイプのキャンバス要素が同じキャンバス オブジェクトを指しているため、キャンバスは常に上書きされます。
これまでのところ、私は理にかなっていると思います!
キャンバスをレイヤーにプロパティとして追加できることはわかっていますが、そうする代わりに、
layer.setWidth(900);
私はしなければならないだろう
layer.canvas.setWidth(900);
私の質問は、どうすればCanvas
オブジェクト関数を継承できますが、新しいレイヤーをインスタンス化すると、それを使用して新しいキャンバス要素を作成できるのでしょうか?
要求されたコード (簡略化)
var carl = {};
carl.Canvas = (function() {
"use strict";
function Canvas(config) {
this._init(config);
};
Canvas.prototype._init = function(config) {
this.element = document.createElement("canvas");
this.context = this.element.getContext("2d");
};
Canvas.prototype.setWidth = function(width) {
this.element.width = width;
};
Canvas.prototype.getWidth = function() {
return this.element.width;
};
Canvas.prototype.setHeight = function(height) {
this.element.width = height;
};
Canvas.prototype.getHeight = function() {
return this.element.height;
};
Canvas.prototype.getContext = function() {
return this.context;
};
return Canvas;
}}();
carl.Layer = (function() {
"use strict";
function Layer() {
};
Layer.prototype = new carl.Canvas();
return Layer;
})();