2016-01-30 2 views
0

У меня есть объект, который я создал из библиотеки easelJS, которую я хотел бы хранить в объекте. Я не уверен, храню ли я его или обращаюсь к нему неправильно, но объект не определен, когда я его проверю позже.Сохранить ссылку на объект библиотеки в объекте

Пример моего объекта:

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

'shape',' name' и другие являются переменными в пределах области действия, они не являются частью созданного объекта. – MinusFour

ответ

2

A 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 заявления одним и тем же именем, что эти свойства.

+0

Очень простой, но чрезвычайно полезный. Я только начал изучать Javascript, поэтому оцените ваш ответ. Я исследую эту концепцию больше. – McArthey