AS3 как против Class ()

#actionscript-3 #class #casting

#actionscript-3 #класс #Кастинг

Вопрос:

Я не до конца понимаю преимущества / недостатки между этими двумя методами приведения типов в этом примере:

 for each(var i:DisplayObject in _display)
{
    trace(i as Sprite);
    trace(Sprite(i));
}
  

Есть ли какие-либо рекомендации по этому поводу вообще? Я всегда оборачивался, Class() как в последнем примере, но as иногда читается легче.

Ответ №1:

Насколько я понимаю, разница TypeError в том, что .

 var o:Object = "test";

trace( o as MovieClip ); // displays: null
trace ( MovieClip ( o ) ); // generates a TypeError
  

http://archive.darronschall.com/weblog/2006/02/actionscript-3-casting.html

Ответ №2:

Я всегда использую as, потому что некоторые классы дают неожиданные результаты при использовании Class(reference). Например

 var arr:Array = [1, 2, 3];

var arr2:Array = Array(arr);
  

arr2 теперь [[1,2,3]]

Это довольно очевидно, когда arr и arr2 определены прямо там вместе, но когда arr определен где-то еще, и вы не знаете, содержит ли он массив или нет, вы можете получить ошибку, используя синтаксис Array(arr).