开发者问题收集

在 JavaScript 对象原型中未找到数组长度属性

2012-06-02
121

我正在尝试创建一个简单的 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:无法读取未定义的属性“length”

1个回答

当您使用 new 关键字调用函数 World.Layer 时,则在 World.Layer 内部, this 指的是从 World.Layer.prototype 继承的空对象,而不是 World

一种解决方案可能是定义一个函数 BM.World.prototype.getLayer ,该函数负责将必要的数据从 BM.World 实例传递到 BM.World.prototype.Layer 构造函数。

Felix Kling
2012-06-02