#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).