Просмотр полной версии : Классы: объект в объекте.
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
я обращался из кода к переменным например таким способом:
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 был заранее описан как объект со своими переменными.
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";
?
Нет, нужно использовать геттеры.
futurator
16.04.2008, 23:07
А как класс Human узнает о существовании класса Head? #include? или как-то по-другому?
Он этот самый Head и создает в конструкторе, я же вам пример написал. Head в конструкторе создает Eyes и т.д.
futurator
16.04.2008, 23:21
А, пардон, втупил =) Спасибо.
futurator
17.04.2008, 00:46
Он этот самый Head и создает в конструкторе, я же вам пример написал. Head в конструкторе создает Eyes и т.д.
А че-то компилятор мне выдает такие темы: "The class or interface 'Head' could not be loaded.
private var _head:Head;
The class or interface 'Head' could not be loaded.
public function get Head():Head {"
Вы могли бы выложить небольшой пример, чтобы он работал? =) Или хотя бы разъяснить мне где я втупил. Дело в том, что я пока еще смутно понимаю алгоритм создания объекта объектом. А когда еще и компилятор смутно понимает о чем речь, так я вообще не могу понять смысла =)))
Нет, не мог бы. Пишие классы сами и постарайтесь понять суть.
Это был пример, а не готовый код.
futurator
17.04.2008, 01:45
Да я понимаю, я собсна и не коллекционирую чужие решения и стараюсь всегда сам понять суть. Но порой вот такие вот мелкие тупики очень тормозят процесс осмысления.
Всеравно спасибо.
futurator
17.04.2008, 23:04
Хыхы... Я все разрулил =)))
Еще раз спасибо за наводку =)
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.