![]() |
Здравствуйте, гость ( Вход | Регистрация )
![]() |
![]()
Сообщение
#1
|
|
![]() Ветеран конференции ![]() ![]() ![]() ![]() ![]() Группа: Пользователь Сообщений: 1130 Регистрация: 27.02.2009 Из: Moscow Пользователь №: 9144 ![]() |
Код package{ import flash.display.* public class Bug1006 extends MovieClip { public function Bug1006() { var mc:*= new MovieClip() (mc as MovieClip).id = 25 // Error #1006: value не является функцией //MovieClip(mc).id=25 // Всё нормально //mc.id=25 // Всё нормально } } } Забавно. Мук в своей нетленке писал что мол оператор приведения типов Объект as Тип - это то же самое, что и приведение типов как Тип(Объект)Нефига. Не то же самое, да еще байт код с as длиннее (и глючнее). Может, конечно, это и не баг, а фича, но механизма этой фичи я что-то не догоняю. -------------------- |
|
|
![]() |
![]()
Сообщение
#2
|
|
Ветеран конференции ![]() ![]() ![]() ![]() ![]() Группа: Flash Zone Team Сообщений: 4832 Регистрация: 10.03.2005 Из: Киев Пользователь №: 5 ![]() |
Вероятно Мук полностью не разобрался с этими методами приведения типов, вот и заявил, что они тождественны. А ты глубже копнул и выяснил всю правду. Так что ты можешь считать себя большим знатоком AS3, чем известный эксперт Колин Мук
![]() А эта ошибка #1006 - возможно глюк. Т.к. с виду обе эти строки кода должны работать одинаково. Кстати, согласно документации, оператор as не является именно приведением типа, а проверкой соответствия типа: он возвращает первый операнд, если тип соответствует указанному во втором операнде, иначе же возвращает null. Т.е. у него немного другая задача, чем у оператора приведения типов MovieClip(mc). -------------------- Best wishes & regards,
MustLive Администратор сайта http://mlfun.org.ua |
|
|
![]()
Сообщение
#3
|
|
![]() Ветеран конференции ![]() ![]() ![]() ![]() ![]() Группа: Пользователь Сообщений: 1130 Регистрация: 27.02.2009 Из: Moscow Пользователь №: 9144 ![]() |
Ну да, я копнул Йогдой и байт-код там разный!
Хотя конструкция as выглядит красивее, на самом деле байт код с ней длиннее (стало быть медленней) и как оказывается глючный. Причем во время выполнения, а не на этапе компиляции! Т.е. ошибку выбрасывает именно флеш-плеер! Таким образом выходит, что во всех случаях, кроме классов массива и времени (как раз примеры Мука) надо пользоваться приведением через Тип(объект). Просто хочется понять причину ошибки: либо это баг, либо фича ))) Если фича, то там есть логика! PS Можно проще проверить во флеш-редакторе (вот для CS3): Код var mc=new MovieClip() (mc as MovieClip).alpha=1 //MovieClip(mc).alpha=1 Это чтобы некоторые "знатоки" не бухтели, что мол у MovieClip (динамического-то класса!) нет свойства id. Ок - вот вам свойство alpha, которое как мы можем догадаться ЕСТЬ по умолчанию у MovieClip )))) Сообщение отредактировал chingachgoog - 18.03.2013 - 13:18 -------------------- |
|
|
![]()
Сообщение
#4
|
|
Ветеран конференции ![]() ![]() ![]() ![]() ![]() Группа: Flash Zone Team Сообщений: 4832 Регистрация: 10.03.2005 Из: Киев Пользователь №: 5 ![]() |
По документации всё якобы должно работать. Из неё эта особенность не видна - ни в качестве фичи (что должно было быть задокументировано), ни тем более бага. О разнице между as и Тип(объект), согласно документации по AS, я написал ранее, но в целом твои примеры кода должны работать одинаково для обоих операторов.
Можешь обратиться к Адобу, чтобы у сотрудников компании выяснить по этому поводу. Но заранее предупреждаю, что отвечают они крайне плохо. На все мои сообщения через контактные формы (по вопросам связанных с безопасностью ПО Адоба, так и других) они не отвечали, полностью игнорируя их. А по емайлу Адобовским сотрудникам отдела безопасности они иногда отвечали, иногда нет, а иногда отвечали с задержкой (после повторного напоминания). Но лишь этот канал связи с компанией Адоб показал свою работоспособность (при этом на вопросы не связанные с безопасностью они не отвечают). Поэтому тебе нужно будет найти пути контакта с Адобом по поводу AS. -------------------- Best wishes & regards,
MustLive Администратор сайта http://mlfun.org.ua |
|
|
![]() ![]() |
![]() |
Текстовая версия | Сейчас: 22.05.2013 - 04:01 |