PDA

Просмотр полной версии : Экземпляры одного класса могут изменять свойства друг у друга?


Mnilionic
09.05.2009, 16:58
Обнаружилось случайно.
Это нормальное поведение или так лучше не делать?


class class1 extends MovieClip {
var ob:Object = new Object();
var txt:TextField;
function class1() {
if (ob.name == undefined) ob.name = 'halo'
else delete ob.name;
txt.text = ob.name;

if(ob.clips == undefined) ob.clips = new Array();
var count = ob.clips.push(this);
trace(count);
if(count == 3) ob.clips[0].txt.text = 'Я могу тебя удалить';
}
}


for (var i = 0; i <= 5; i++)
this.attachMovie('class1', 'c' + i, i, {_y:i * 90});

Stargazer
09.05.2009, 17:07
class class1 {
var ob:Object = new Object(); //на практике я обнаружил, что такое выражение делает переменную статичной, хотя так, по идее, не должно быть. поэтому так лучше не делать.
static var ob1:Object= new Object(); // если хотите использовать одну переменную на весь класс - объявляйте так. (в этом случае инициализация уместна)

function class1() {
// ...
}
}

dimarik
09.05.2009, 17:46
Объекты со сложным типом данных инициализируйте в конструкторе.

etc
09.05.2009, 20:39
Mnilionic, это проблемы реализации классов в AS2, лучше не объявлять сложные типы данных вне методов класса.

Mnilionic
09.05.2009, 21:15
то есть так верно:

class class1 extends MovieClip {
static var ob:Object;
var txt:TextField;
function class1() {
if (!ob){
ob = new Object();
ob.clips = new Array();
}
var count = ob.clips.push(this);
if(count == 3) ob.clips[0].txt.text = 'привет первенцу';
}
}
понятно. Всем спасибо.

Stargazer
09.05.2009, 21:40
то есть так верно: ...
Верно. Это статическая переменная. Она создаётся один раз на весь класс и доступна в контексте класса (а не экземпляра).