0

アニメーションをサポートするために、単純なjavascript / html5キャンバスエンジンを作成しようとしています(これは主に学習目的です)。

エンジン:

/* BOF GLOBAL REFERENCES*/
var BM = BM || {};
/* EOF GLOBAL REFERENCES */

/* BOF GLOBAL VARIABLES */
/* EOF GLOBAL VARIABLES */

/* BOF FUNCTIONS */
BM.World = function(container,width,height,name){
    this.container = $("#"+container);
    this.width = width;
    this.height = height;
    this.name = name || "DefaultWorld";

    this.layers = new Array();
}

BM.World.prototype.Layer = function(options){
        var options = options || {};
        options.bgcolor = options.bgcolor || "transparent";
        this.container.html( "<canvas id='"+this.name+"_layer_"+this.layers.length+"' style='position:absolute;top:0;left:0;width:"+this.width+";height:"+this.height+";background:"+options.bgcolor+";'>"
                            +"</canvas>");
}
/* EOF FUNCTIONS */

そして、単純な発信者コード:

$(function(){
    var World = new BM.World("background_container",400,600);
    var layer1 = new World.Layer({bgcolor:"#ff0000"});
});

Layer誰かが私が定義で間違っていることを教えてもらえますか?私が得るエラーは次のとおりです。Uncaught TypeError: Cannot read property 'length' of undefined

4

1 に答える 1

1

World.Layerキーワードを指定して関数を呼び出すと、newinsideWorld.Layerは、を継承するのではなく、をthis継承する空のオブジェクトを参照します。World.Layer.prototypeWorld

解決策は、インスタンスからコンストラクターBM.World.prototype.getLayerに必要なデータを渡すことを処理する関数を定義することです。BM.WorldBM.World.prototype.Layer

于 2012-06-02T14:33:00.850 に答える