Расшифруйте код as3

Рейтинг: -1Ответов: 1Опубликовано: 21.01.2015

Стыдно после всего то, но что-то в голову ничего не лезет. Стр 285 книги Action Script 3.0 Шаблоны проектирования:

var child:DisplayObject = this.getChildAt(i);
localDamage += IPlane(child).getDamage();

Не знаю, может, нужен связанный код, если достаточно и этого, просветите, что это вообще за вызов, дисплей обжекта через интерфейс? Я просто синтаксис понять не могу. Что за интерфейс, скобки, объект? Как это читается? В смысле trace(IPlane(child)) чего там выдаст и почему?

Ответы

▲ 1Принят

Это попытка приведения экземпляра объекта к интерфейсу.

То есть подразумевается, что класс объекта реализует этот интерфейс.

Если попытка будет удачная, то будет вызван метод getDamage().

Если нет, выпадет с ошибкой, что неправильно, на мой взгляд, нужна проверка приведения к типу.

if ( child is IPlane) localDamage += IPlane(child).getDamage();

trace(IPlane(child)) - читается как попытка вызвать toString() у экземпляра IPlane, если приведение к типу сработало. Если нет выдаст "null". Если экземпляр IPlane не реализует toString, то выдаст что-то вроде Object a56ed4f Sprite или еще какой верхний класс экземпляра.