вторник, 1 февраля 2011 г.

Получение ссылки на класс объекта по его экземпляру (ActionScript)

Получить ссылку на класс можно одним из способов описанных ниже.


  1. function getClassRef(instance:Object):Class
     {
      return getDefinitionByName(getQualifiedClassName(instance)) as Class;
     }
    

  2. function getClassRef(instance:Object):Class
     {
      return Object(instance).constructor as Class;
     }
    
Второй вариант хоть и не документирован адобами, но имеет право на жизнь (уж не знаю на долгую ли, по крайней мере в последнем флешплеере она все еще фурычит).

Теперь по производительности...
Вариант №2 примерно в 4 раза быстрее (проверено на 100'000 итерациях), да и выглядит как то краше и без лишних вызовов.

Эту возможность я использовал в проекте в месте, где в зависимости от поданного экземпляра объекта нужно произвести те или иные действия, пример:
function polymorphAction(instance:Object):void
{
 var clazz:Class = Object(instance).constructor as Class;
 switch (clazz)
 {
  case Friend:
   trace("друг");
   break;
   
  case Enemy:
   trace("враг");
   break;
  default:
   trace("а так");
 }
}

Комментариев нет:

Отправить комментарий