Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 1.0/2.0 (http://www.flasher.ru/forum/forumdisplay.php?f=93)
-   -   Экземпляры одного класса могут изменять свойства друг у друга? (http://www.flasher.ru/forum/showthread.php?t=124817)

Mnilionic 09.05.2009 16:58

Экземпляры одного класса могут изменять свойства друг у друга?
 
Обнаружилось случайно.
Это нормальное поведение или так лучше не делать?

Код AS1/AS2:

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 = 'Я могу тебя удалить';
        }
}

Код AS1/AS2:

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


Stargazer 09.05.2009 17:07

Код AS1/AS2:

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

то есть так верно:
Код AS1/AS2:

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

Цитата:

Сообщение от Mnilionic (Сообщение 818700)
то есть так верно: ...

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


Часовой пояс GMT +4, время: 17:59.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.