ГлавнаяActionScript 3 — «100 советов» › Оператор is вместо instanceof

Оператор is вместо instanceof

June 19th, 2006
В ActionScript 3 введен новый оператор “is” (is operator) для проверки принадлежности экземпляра класса к типу класса или интерфейса.

Код:
var mySprite:Sprite = new Sprite(); trace(mySprite is Sprite); // true trace(mySprite is DisplayObject); // true trace(mySprite is IEventDispatcher); // true

Оператор is заменяет оператор instanceof (instanceof operator), использовавшийся в ActionScript 1 и 2. Оператор is проверяет цепочку наследования AS3 класса, в то время как instanceof проверяет цепочку прототипов (prototype). Отсюда несколько нюансов:
1. поскольку, AS3 классы воссоздают цепочку прототипов, то с помощью instanceof теоретически можно проверить принадлежность экземпляра класса к определенному типу AS3 класса, но не к интерфейсу:

Код:
var mySprite:Sprite = new Sprite(); trace(mySprite instanceof Sprite); // true trace(mySprite instanceof DisplayObject); // true trace(mySprite instanceof IEventDispatcher); // false – нет в цепочке прототипов

2. С помощью оператора is нельзя проверить тип динамического класса созданного не через наследование, а через прототип (стиль AS1):

Код:
var AS1StyleClass:Function = function(){} AS1StyleClass.prototype = new MovieClip(); var as1Instance:* = new AS1StyleClass(); trace(as1Instance instanceof AS1StyleClass); // true trace(as1Instance instanceof MovieClip); // true trace(as1Instance is AS1StyleClass); // true trace(as1Instance is MovieClip); // false

В AS3 следует использовать только оператор is, прежний оператор instanceof хоть и поддерживается, но компилятор будет выдавать предупреждение:
The instanceof operator is deprecated, use the is operator instead.

Категория: ActionScript 3 — «100 советов» Ярлыки: ,

Смотрите также

Загрузка текста и XML с использованием URLLoader Timelines как класс
  1. Пока без комментариев.
  1. Пока нету.