0

私は JavaScript を学んでおり、現在 html5 キャンバス API で遊んでいます。最初にキャンバス要素を作成する必要があり、2d/3d コンテキスト (接続されていない 2 つの変数) を取得する必要があるため、これら 2 つを 1 つにマージするものを作成することが論理的に思えました。

アイデアは、グラフィックス(gfx)オブジェクト(実際にはコンテキストオブジェクト)を持ちgraphics.canvas、キャンバス要素への参照であるため、キャンバスgfx.fillRect(0,0,150,75);のサイズを変更したり、キャンバスのサイズを変更したりできますgfx.canvas.width = x;...

contextコンストラクター関数を作成しようとすると、実際にはうまくいきません。プロパティとしてオブジェクトを返すソリューションを思いつきましたがcanvas、これが正しい方法かどうかはわかりません。

この問題に対する最善のアプローチは何でしょうか?

これが私のコードです:

function Canvas (context, width, height) {
    var canvas = document.createElement('canvas'),
    contex = canvas.getContext(context);

    this = contex; // <<-- Getting error here
    this.canvas = canvas;

    this.canvas.width = width;
    this.canvas.height = height;

    this.append = function () {
        document.body.appendChild(this.canvas);
    };
}

function Canvas2 (context, width, height) {
    var canvas = document.createElement('canvas'),
    contex = canvas.getContext(context);

    contex.canvas = canvas;

    contex.canvas.width = width;
    contex.canvas.height = height;

    contex.append = function () {
        document.body.appendChild(this.canvas);
    };

    return contex;
}

var gfx = new Canvas('2d', 400, 400),
gfx2 = Canvas2('2d', 400, 400);

gfx.append();
gfx2.append();
4

2 に答える 2

5

thisは JavaScript の予約語であり、読み取り専用のコンテキスト変数を指します。再割り当てすることはできません。

contex単純に変数を使い続けられない理由がない場合は、そうしてください。ローカル変数を作成する必要がある場合は、別の名前を付けます。

var that = contex;
于 2013-04-08T20:45:40.823 に答える