Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Как узнать что, например, Sprite "есть" DisplayObject? (http://www.flasher.ru/forum/showthread.php?t=140019)

orcpochta 18.05.2010 00:53

Как узнать что, например, Sprite "есть" DisplayObject?
 
Извините, затупился на ровном месте:
как узнать, что один класс является наследником другого?

Добавлено через 36 минут
Немного конкретней поясню, что требуется:

Код AS3:

public function someMethod (someClass:Class):void
{
    //тут нужно сделать проверку, что someClass "есть" наследник ParentClass;
 
    var param:ParentClass = new someClass( );
}


Gaen 18.05.2010 01:51

вы не поверите... :)
Код AS3:

trace(mySprite is DisplayObject);


orcpochta 18.05.2010 01:54

Цитата:

Сообщение от GAIKER (Сообщение 908877)
вы не поверите... :)
Код AS3:

trace(mySprite is DisplayObject);


не поверю - мне надо класс проверить, а не инстанс))

Добавлено через 6 минут
на самом деле я загоняюсь, и приведение типов само за меня все проверит, но мне теперь просто из любопытства надо понять, как узнать, что один класс - наследник другого

Партизан 18.05.2010 10:56

Копать здесь... Это если точно нужно знать кто от кого....
На самом деле - узнать является ли объект наследником какого-либо класса быстро можно так:

Код AS3:

var s:Sprite = new Sprite()
trace(s as DisplayObject); //[object Sprite]
trace(s as DisplayObjectContainer); //[object Sprite]
trace(s as EventDispatcher); //[object Sprite]
trace(s as MovieClip); //null


BlooDHounD 18.05.2010 10:58

isPrototype

orcpochta 18.05.2010 11:10

Цитата:

Сообщение от Партизан (Сообщение 908918)
Копать здесь... Это если точно нужно знать кто от кого....
На самом деле - узнать является ли объект наследником какого-либо класса быстро можно так:

Код AS3:

var s:Sprite = new Sprite()
trace(s as DisplayObject); //[object Sprite]
trace(s as DisplayObjectContainer); //[object Sprite]
trace(s as EventDispatcher); //[object Sprite]
trace(s as MovieClip); //null


Про "копать здесь" - помогло, там можно проследить всю цепь наследования и реализуемые интерфейсы.
А про "as" не актуально, т.к. я сам класс хотел проверить, а не его экземпляр)))

Добавлено через 1 минуту
Цитата:

Сообщение от BlooDHounD (Сообщение 908920)
isPrototype


как-то так...)))

Цитата:

По запросу isPrototype не найдено ни одного документа.

etc 18.05.2010 11:17

isPrototypeOf.

orcpochta 18.05.2010 11:30

Цитата:

Сообщение от etc (Сообщение 908924)
isPrototypeOf.

не могу соорудить конструкцию "класс Сын является наследником класса Отец"

Добавлено через 3 минуты
А не... могу!)))

Код AS3:

trace(Object(Class(DisplayObject).prototype).isPrototypeOf(Object(Class(Sprite).prototype)));

или если не строго

Код AS3:

trace(DisplayObject.prototype.isPrototypeOf(Sprite.prototype));

Добавлено через 14 минут
Ну хорошо, а если в примере из первого поста надо проверить не наследование, а реализацию интерфейса - есть простой способ?

Код AS3:

public function someMethod (someClass:Class):void
{
    //тут нужно сделать проверку, что someClass реализует MyInterface;
 
    var inst:MyInterface = new someClass( );
}


etc 18.05.2010 11:54

Код AS3:

trace(describeType(Sprite).factory.implementsInterface.(@type==getQualifiedClassName(IBitmapDrawable)).length() > 0);


orcpochta 18.05.2010 11:56

Цитата:

Сообщение от etc (Сообщение 908945)
Код AS3:

trace(describeType(Sprite).factory.implementsInterface.(@type==getQualifiedClassName(IBitmapDrawable)).length() > 0);


не, это я и сам понял - точно также можно проверить и наследование))) Партизан уже подсказал))))

способа вроде isPrototypeOf не существует?))


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

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