Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 02.03.2009, 13:01
Smirnov48 вне форума Посмотреть профиль Отправить личное сообщение для Smirnov48 Найти все сообщения от Smirnov48
  № 1  
Ответить с цитированием
Smirnov48

Регистрация: Feb 2008
Сообщений: 72
По умолчанию Применение for (var prop:String in Object) к объектам собственных классов.

Хотел написать вот так:
Код AS3:
package 
{
	import flash.display.Sprite;
 
	public class Main extends Sprite
	{
		public function Main()
		{
			var o:Object = new Object();
			o.prop1 = "a";
			o.prop2 = "b";
			o.prop3 = "c";
			o.prop4 = "d";
 
			var o2:Object = new SomeObject();
 
			trace("Печатаем свойства Object");
			for (var p:String in o) {
				trace(p + " = " + o);
			}
 
			trace("Печатаем свойства SomeObject");
			for (var p2:String in o2) {
				trace(p2 + " = " + o2);
			}
		}
	}
}
Код AS3:
package
{
	public class SomeObject
	{
		public var prop1:String = "a";
		public var prop2:String = "b";
		public var prop3:String = "c";
		public var prop4:String = "d";
 
		public function SomeObject()
		{
		}
	}
}
Output:
Код:
Печатаем свойства Object
prop2 = [object Object]
prop1 = [object Object]
prop3 = [object Object]
prop4 = [object Object]
Печатаем свойства SomeObject
Пробовал делать dynamic классу, и расширял Object, и пытался приводить к Object-y. Бесполезно - for in не видит свойства SomeObject. Подскажите пожалуйста способ заставить его работать? По возможности, не хотелось бы усложнять SomeObject.

Старый 02.03.2009, 13:12
cleptoman вне форума Посмотреть профиль Отправить личное сообщение для cleptoman Найти все сообщения от cleptoman
  № 2  
Ответить с цитированием
cleptoman
 
Аватар для cleptoman

блогер
Регистрация: Mar 2007
Сообщений: 1,291
Записей в блоге: 5
Отправить сообщение для cleptoman с помощью ICQ
describeType
м?
__________________
http://cleptoman.free-lance.ru
achivements: дважды благословлен на воровство. осеяный благодатью

Старый 02.03.2009, 13:15
wvxvw вне форума Посмотреть профиль Отправить личное сообщение для wvxvw Найти все сообщения от wvxvw
  № 3  
Ответить с цитированием
wvxvw
Modus ponens
 
Аватар для wvxvw

модератор форума
Регистрация: Jul 2006
Адрес: #1=(list #1#)
Сообщений: 8,049
Записей в блоге: 38
Наследоваться от прокси и оверрайдить proxy_internal::nextName, proxy_internal::nextValue
__________________
Hell is the possibility of sanity

Старый 02.03.2009, 22:55
Яски вне форума Посмотреть профиль Отправить личное сообщение для Яски Найти все сообщения от Яски
  № 4  
Ответить с цитированием
Яски

блогер
Регистрация: May 2008
Адрес: (0, 10, 185) в локальной системе
Сообщений: 721
Записей в блоге: 6
Почему бы не использовать массив?

Старый 02.03.2009, 23:03
BlooDHounD вне форума Посмотреть профиль Отправить личное сообщение для BlooDHounD Посетить домашнюю страницу BlooDHounD Найти все сообщения от BlooDHounD
  № 5  
Ответить с цитированием
BlooDHounD
стервочка (я мужик)
 
Аватар для BlooDHounD

блогер
Регистрация: Mar 2004
Адрес: Борисов
Сообщений: 3,161
Записей в блоге: 22
wvxvw, может flash_proxy? а то уже грустно смотреть ...

Старый 03.03.2009, 11:22
Smirnov48 вне форума Посмотреть профиль Отправить личное сообщение для Smirnov48 Найти все сообщения от Smirnov48
  № 6  
Ответить с цитированием
Smirnov48

Регистрация: Feb 2008
Сообщений: 72
Спасибо. Пришлось скрестить describeType с flash_proxy. Вот, что получилось:
Код AS3:
package
{
	import flash.utils.describeType;
	import flash.utils.Proxy;
	import flash.utils.flash_proxy;
 
	public class SomeObject extends Proxy
	{
		public var prop1:String = "a";
		public var prop2:String = "b";
		public var prop3:String = "c";
		public var prop4:String = "d";
 
 
		override flash_proxy function nextNameIndex(index:int):int 
		{
			if ((index < describeType(this).variable.length()) &&
					(describeType(this).variable[index].@name != "")) {
				return ++index;
			} else {
				return 0;
			}
		}		
 
		override flash_proxy function nextName(index:int):String
		{
        	return describeType(this).variable[--index].@name;
		}
	}
}
Еще пришлось поменять Main:
Код AS3:
			trace("Печатаем свойства Object");
			traceProps(o);
 
			trace("Печатаем свойства SomeObject");
			traceProps(o2);
		}
 
		private function traceProps(obj:Object):void
		{
			for (var p:String in obj) {
				trace(p + " = " + obj[p]);
			}
		}
И все заработало, как надо!

Создать новую тему Ответ Часовой пояс GMT +4, время: 23:36.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


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


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