存储对象中库对象的引用

时间:2016-01-30 18:00:25

标签: javascript arrays object easeljs

我有一个我想从easylJS库中创建的对象,我想将它存储在一个对象中。我不确定我是存储它还是错误地访问它,但是当我稍后检查它时,该对象是未定义的。

我的对象的一个​​例子是:

var ShapeObject = function() {
    var self          = this;

    var name;
    var shape;
    var rotation;
    var color;

    this.initialize = function(n, s) {
        name = n;
        shape = s;
        rotation = this.randomRange()+1; 
        color = this.randomColor();
    };    
};

我正在尝试创建和存储如下:

shapes = new Array();
for (i=0;i<2;i++) {
    var theShape = new createjs.Shape();

    sObject = new ShapeObject();
    sObject.initialize("shape"+i, theShape);
    shapes.push(sObject);
}

后来我只是试图尊重并创建如下:

for (i=0;i<2;i++) {
    stage.addChild(shapes[i].shape);
}

是否有可能做我正在尝试的事情?

1 个答案:

答案 0 :(得分:2)

代码中的shapeObject没有.shape属性,因此shapes[i].shape将为undefined

在构造函数中声明的局部变量不是外部世界的可见属性。它们根本不是属性,只是局部变量。它们适用于.initialize()方法和构造函数,但不适用于其他任何内容。

必须在方法中初始化对象的公共属性,方法是设置this.shape = xxx this指向您的对象。

您可以将initialize()方法更改为:

this.initialize = function(n, s) {
    this.name = n;
    this.shape = s;
    this.rotation = this.randomRange()+1; 
    this.color = this.randomColor();
}; 

然后,删除与这些属性同名的所有var声明。