Показать сообщение отдельно
Старый 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.