PDA

Просмотр полной версии : Идентификация объекта ByteArray


fish_r
23.09.2012, 14:04
Формально ByteArray является наследником Object-a. Вот только обращения к свойствам и методам байтэррея определенным в Object приводят либо к ошибке, либо возвращают false/null ( в том числе применение is/as ). То есть можно, конечно, обратиться к свойству объекта bytesAvailable и try/catch перехватить ошибку ( если это окажется не byte array), но это ужасный выход.

Отсюда два вопроса:

С какой целью методы объекта переопределены в его наследнике ( ваша версия )?
Как, всё же, корректно идентифицировать ByteArray?

Wolsh
23.09.2012, 15:17
Приведите пример ошибки.

var ba:ByteArray = new ByteArray();
trace(ba is ByteArray); // true
trace((ba as ByteArray).bytesAvailable); // 0

fish_r
23.09.2012, 15:57
Сори, неправильно формулировал


trace( "bytes: " + bytes is ByteArray ); //false
trace( "bytes: " + ( bytes is ByteArray ) ); //bytes: true


ещё можно определить тип через функции getQualifiedClassName, getQualifiedSuperclassName
правда в контексте программы мне это не удобно, т.к. мне сначала нужно выяснить наличие некого свойства в объекте через hasOwnProperty(), а байтэрей возрващает ошибку обращения :(

Deimos747
23.09.2012, 16:04
trace( "bytes: " + bytes is ByteArray ); //false
trace( "bytes: " + ( bytes is ByteArray ) ); //bytes: true


false в первом случае, потому что сначала выполнится сложение, а уже потом проверка. Результатом конкатенации будет String

artcraft
23.09.2012, 16:13
trace( "bytes:", bytes is ByteArray ); //bytes: true