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

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

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

Регистрация: Dec 2007
Сообщений: 6
По умолчанию Имя класса из объекта

Я изучаю большой проект на флеш.
Есть функция:
class MyClass
{
....
function update(infoObj)
{
....
}
}
Можно ли в теле функции узнать к какому классу принадлежит infoObj? Я написал огромную процедуру, в которой проверяется на соответствие всем классам в проекте (около 150 проверок), но меня это не устраивает. Может есть какой-нибудь метод проверки, кроме instanceof?

Потом, я вижу (через trace), что значения полей infoObj меняются не в самой процедуре, а за ее пределами. Хм....в проекте около 100 классов и половина из них содержат переменную-объект infoObj. Нельзя ли проследить, где происходит инициализация этого объекта?

Поиск использовал.

Старый 25.12.2007, 16:31
iNils вне форума Посмотреть профиль Отправить личное сообщение для iNils Посетить домашнюю страницу iNils Найти все сообщения от iNils
  № 2  
Ответить с цитированием
iNils
Негуру
 
Аватар для iNils

администратор
Регистрация: Jan 2000
Адрес: Кёнигсберг in Moscow
Сообщений: 21,884
Записей в блоге: 7
1. Нельзя. Единственный выход, это в каждом классе создать статичное поле, где указывать имя класса.
2. Не понял сути вопроса.
__________________
(и)Нильс.ru | Плагины для FlashDevelop

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

модератор форума
Регистрация: Jul 2006
Адрес: #1=(list #1#)
Сообщений: 8,049
Записей в блоге: 38
Я обычно в таких случаях пишу в классах что-то типа:
Очень помогает при трейсе и т.п.
Код:
class ClassA {
public function toString():String {
return "[ClassA]";
}
}
Соответственно, туда можно добавить разные дополнительные сведения, (например, инстансы имеют свой ИД - его тож можно туда, версию ну и т.п.
__________________
Hell is the possibility of sanity

Старый 25.12.2007, 20:34
wizzard555 вне форума Посмотреть профиль Отправить личное сообщение для wizzard555 Найти все сообщения от wizzard555
  № 4  
Ответить с цитированием
wizzard555

Регистрация: Dec 2007
Сообщений: 6
Все это классно, но пока AS не то чтобы до С++, а даже до дельфийской VCL очень далеко.
И скрытых никаких полей нет?

В Делфи, например, есть стек вызовов. И видно откуда (по иерархии эта процедура вызывалась. Ничего подобного в AS нет?

Старый 25.12.2007, 20:42
iNils вне форума Посмотреть профиль Отправить личное сообщение для iNils Посетить домашнюю страницу iNils Найти все сообщения от iNils
  № 5  
Ответить с цитированием
iNils
Негуру
 
Аватар для iNils

администратор
Регистрация: Jan 2000
Адрес: Кёнигсберг in Moscow
Сообщений: 21,884
Записей в блоге: 7
2 wvxvw, toString для этого использовать не гуд.
2 wizzard555, есть, если использовать mtasc, он может узнать имя класса, метод и номер строки от куда был вызван trace
__________________
(и)Нильс.ru | Плагины для FlashDevelop

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

модератор форума
Регистрация: Jul 2006
Адрес: #1=(list #1#)
Сообщений: 8,049
Записей в блоге: 38
Ну, собственно... если это делать в своих классах, и делать это сознательно - ничего страшного быть не должно. Ну, за исключением всех наследуемых от MovieClip - там в трейс попадает не toString, а _name. Ну и еще не стоит это делать со всякими наследуемыми от, например, XMLNode классами - там где toString() нужен в первозданном виде.

С другой стороны, можно перебирать все переменные в _global (чем по-сути являются классы) и пытаться выяснить является ли объект вызвавший проверку инстансом одной из этих переменных-классов. Проблема в том, что если классов много и уровень вложенности тоже большой, то прийдется сделать кучу операций - вобщем, не рационально.
Код:
class myClass {
	private static var __registrationDone:Boolean = false;
	private static var __di:Function = function():Void {
		Object.prototype.debuggerINFO = function():String {
			if(!this.__debuggerINFO){
				_global.ASSetPropFlags(_global,null,8,true);
				var s;
				for(var i in _global){
					if(this instanceof _global[i]){
						if(s instanceof _global[i] || !s){
							s = i;
						}
					}
					for(var j in _global[i]){
						if(this instanceof _global[i][j]){
							if(s instanceof _global[i][j] || !s){
								s = j;
							}
						}
						for(var k in _global[i][j]){
							if(this instanceof _global[i][j][k]){
								if(s instanceof _global[i][j][k] || !s){
									s = k;
								}
							}
						}
					}
				}
				if(s){
					this.__debuggerINFO = s;
					return "["+s+"]";
				}
			} else {
				return "["+this.__debuggerINFO+"]";
			}
			return "[Unsigned class]";
		}
	}
	function myClass(){
		if(!__registrationDone){
			__di();
			__registrationDone = true;
		}
		};
}
Код:
import flash.geom.Matrix;
//
var mc:myClass = new myClass();
var mtx:Matrix = new Matrix();
trace(mc["debuggerINFO"]()); // [myClass]
trace(_root["debuggerINFO"]()); // [MovieClip]
trace(mtx["debuggerINFO"]()); // [Matrix]
Вот, это общая идея, но чет ничего лучше не придумал
__________________
Hell is the possibility of sanity


Последний раз редактировалось wvxvw; 26.12.2007 в 01:24.
Старый 26.12.2007, 02:13
etc вне форума Посмотреть профиль Найти все сообщения от etc
  № 7  
Ответить с цитированием
etc
Et cetera
 
Аватар для etc

Регистрация: Sep 2002
Сообщений: 30,787
Цитата:
Сообщение от wizzard555
В Делфи, например, есть стек вызовов. И видно откуда (по иерархии эта процедура вызывалась. Ничего подобного в AS нет?
Есть, но в AS3.

Старый 26.12.2007, 10:47
iNils вне форума Посмотреть профиль Отправить личное сообщение для iNils Посетить домашнюю страницу iNils Найти все сообщения от iNils
  № 8  
Ответить с цитированием
iNils
Негуру
 
Аватар для iNils

администратор
Регистрация: Jan 2000
Адрес: Кёнигсберг in Moscow
Сообщений: 21,884
Записей в блоге: 7
wvxvw, ты меня начинаешь пугать своими постоянными хаками и спорными решениями. Если тебе так нравится, ладно. Но не учи этому других.
Достаточно сделать
Код:
class net.world.MyClass {
	private static function get CLASS_NAME ():String {
		return "net.world.MyClass";
	}
	....
	function update(infoObj) {
	....
	}
}
В FD/FDT подправить шаблоны, и эти строчки будут автоматичски добавляться при создании нового класса. Нужно сделать больше при вызове, дополняй функцию.
А у toString совсем другие задачи.
__________________
(и)Нильс.ru | Плагины для FlashDevelop

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

модератор форума
Регистрация: Jul 2006
Адрес: #1=(list #1#)
Сообщений: 8,049
Записей в блоге: 38
Ну, прям-таки хак... Вобщем, не знаю, думаю, что если человек разберется с кодом, то сможет уж сам решить, хочется ему его использовать или нет. Я же не заставляю делать именно так.
А toString() часто вообще не выполняет никаких функций... В классах ММ довольно часто встречается ситуация, когда его именно для этого используют.
__________________
Hell is the possibility of sanity

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

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

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


 


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


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