Форум 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=111139)

futurator 16.04.2008 21:01

Классы: объект в объекте.
 
И снова здравствуйте.
Таких возникло два вопроса:
1) каким образом ПРАВИЛЬНО создавать объекты в классе? Тоесть не просто
Код:

myObj:Object = new Object();
,
а сразу с указанием переменных объекта.
2) можно ли создавать вложеные объекты в объектах в классе? (судя по моим скромным попыткам - нельзя =) И если можно, то как?
Спасибо.

chingachgoog 16.04.2008 21:11

а какая разница, в классе - не вклассе...

Код:

obj={prop1:"значение1", prop2:1000, prop3:{prop2:234}, prop4:null}
trace(obj.prop3.prop2) // 234


futurator 16.04.2008 21:18

Поясню: например хочу создать класс для игры. Класс допустим Human, в котором иерархически расписаны объекты в него входящие, типа Head, Body и тд. В то же время, каждый объект включает в себя под_объекты, например: в объекте Head существует под_объект Eyes, который уже несет в себе свои переменные (например color_, для цвета глаз).
В итоге когда я создаю персонажа
Код:

Edd:Human = new Human();
чтобы все переменные автоматически инициализировались (через конструктор или иначе - не суть). И я обращался из кода к переменным например таким способом:
Код:

Edd.Head.Eyes.color_ = "green";
Может это попытка изобрести велосипед через ****? =)))

chingachgoog 16.04.2008 21:27

Цитата:

Сообщение от futurator
я обращался из кода к переменным например таким способом:
Код:

Edd.Head.Eyes.color_ = "green";

А как создавались объекты?

Можно

Код:

obj={}
obj.obj2={}
obj.obj2.prop=123
trace(obj.obj2.prop) // 123

Нельзя

Код:

obj.obj2.prop=123
trace(obj.obj2.prop) // undefined

или

Код:

obj={}
obj.obj2.prop=123
trace(obj.obj2.prop) // undefined


futurator 16.04.2008 21:35

Ну я пытался изобразить такую штуку:
Код:

var Head:Object = { Eyes:Object }
или
Код:

var Head:Object = { Eyes:objEyes }
где objEyes был заранее описан как объект со своими переменными.

etc 16.04.2008 22:28

Head, Eyes должны быть классами, а ссылки на них — поля классов.
Код:

var human:Human = new Human();
human.head.eyes.color = 0xFF0000;

Код:

class Human {
    public function Human() {
        this._head = new Head();
    }

    private var _head:Head;

    public function get head():Head {
        return this._head;
    }
}

И т.д.

futurator 16.04.2008 22:40

Здорово, спасибо.
А можно обойтись только конструкторами? Ну тоесть их будет достаточно для того, чтобы потом обращаться к переменным таким образом:
Код:

Human.Head.Eyes.color_ = "green";
?

etc 16.04.2008 22:44

Нет, нужно использовать геттеры.

futurator 16.04.2008 23:07

А как класс Human узнает о существовании класса Head? #include? или как-то по-другому?

etc 16.04.2008 23:13

Он этот самый Head и создает в конструкторе, я же вам пример написал. Head в конструкторе создает Eyes и т.д.


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

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