Как проверить, имеют ли два объекта тот же тип в Actionscript?

Проблема в том, что хотя

$options['categories']

является действительным

$options['categories']['all']

нет.

Изменение вашей линии на

$all_categories = isset($options['categories']) && 
                  isset($options['categories']['all']) && 
                  $options['categories']['all'] ? true : false;

Подавит вашу ошибку и вернет FALSE. (перевод строки добавлен только для ясности и может быть удален)

22
задан Simon_Weaver 22 November 2008 в 03:40
поделиться

6 ответов

Лучший способ состоит в том, чтобы использовать flash.utils.getQualifiedClassName(). Кроме того, можно использовать flash.utils.describeType() для получения XML-документа описывание больше о классе.

19
ответ дан 29 November 2019 в 04:29
поделиться

Actionscript 3 имеет is оператор, который можно использовать для сравнения объектов. Рассмотрим следующий код:

var mySprite:Sprite = new Sprite();
var myMovie:MovieClip = new MovieClip();

trace(mySprite is Sprite);
trace(myMovie is MovieClip);
trace(mySprite is MovieClip);
trace(myMovie is Sprite);

, который выдаст следующий вывод:

true
true
false
false

Это будет работать для встроенных классов и классов, которые вы создаете сами. Экземпляр ActionScript 2, эквивалентный , является оператором , это instanceof .

17
ответ дан 29 November 2019 в 04:29
поделиться

Вы захотите использовать Object.prototype.constructor.

От документация :

 dynamic class A {}
  trace(A.prototype.constructor);      // [class A]
  trace(A.prototype.constructor == A); // true
  var myA:A = new A();
  trace(myA.constructor == A);         // true

(Удобно, это также, как проверить типы в JavaScript, который является тем, что первоначально привело меня к этому в документах)

Так, для проверения этого, прежде чем я отправил здесь я попробовал его в приложении, которое я имею в классе под названием Плеер. Так как свойство прототипа статично, Вы не можете назвать его с помощью "этого", но можно просто пропустить идентификатор объема, и оно работает:

public function checkType():void {
    trace(prototype.constructor, prototype.constructor == Player);
    // shows [class Player] true
}
4
ответ дан 29 November 2019 в 04:29
поделиться

Если Вы хотите объяснить наследование, то Вы могли бы хотеть попробовать что-то вроде этого:

if (objectA is objectB.constructor || objectB is objectA.constructor)
{
    // ObjectA inherits from ObjectB or vice versa
}
1
ответ дан 29 November 2019 в 04:29
поделиться
Object obj = new Object();
Object o = new Object();

if(o.getClass().getName().endsWith(obj.getClass().getName())){
    return true;    
}else{
        return false;
}
0
ответ дан 29 November 2019 в 04:29
поделиться

В более общем плане, если вы хотите проверить, является ли objectA подтипом objectB

import flash.utils.getDefinitionByName;
import flash.utils.getQualifiedClassName;

...

if (objectA is getDefinitionByName(getQualifiedClassName(objectB)))
{
    ...
}
0
ответ дан 29 November 2019 в 04:29
поделиться
Другие вопросы по тегам:

Похожие вопросы: