ГлавнаяActionScript 3 — «100 советов» › Использование прототипов (prototype)

Использование прототипов (prototype)

June 19th, 2006
Прототип объекта в ActionScript — это объект, который существует среди классов, чьи значения доступны для всех экземпляров класса, к которым он (объект) принадлежит. В ActionScript 1.0/2.0 prototype использовался для контроля наследования класса. Когда экземпляр подкласса обращается к переменной, сначала проверяется наличиие этой переменной в текущем экземпляре класса, потом (если не нашел) в прототипе данного класса, потом в прототипе базового класса, и так далее по цепочке наследственности (прототипов), до тех пор пока есть базовые классы.

В ActionScript 3.0 наследование в основном управляется через Класс Наследований и не зависит от прототипа объекта. Однако, прототип объекта всё же существует и обеспечивает большую часть функциональности, как это было и в AS1.0/2.0

Каждый класс и внутриклассовая функция (метод), созданные в ActionScript 3.0 имеют прототипный объект связанный с ними. Для классов прототип имеет имеет аттрибут «read-only», что значит, что вы не можете изменять его значение новым. Однако, это вовсе не значит, что вы не можете задать новую переменную и присвоить ей значение внутри прототипа (иначе наличие прототипа было б бессмысленным ). Прототипы функций изменяемы, что позволяет создавать динамические классы, используя определение классов написанием функций и определением наследований через прототипы («old style» как это делалось раньше).

Пример:

ActionScript Code:

Код:
package { import flash.display.Sprite; public dynamic class MyClass extends Sprite { public function MyClass(){ // prototype = new Object(); // ОШИБОЧНО, нельзя изменить прототип класса prototype.newValue = 1; // OK, добавляем (или удаляем) переменные в прототип trace(this.newValue); // 1 trace(prototype.toString); // function Function() {} trace(prototype.addChild); // undefined trace(addChild); // function Function() {} // динамическое определение класса («old style») var TempClass:Function = function():void { trace("Создаём TempClass"); } TempClass.prototype = prototype; // OK, можно утсанавливать наследствования var tempObject:* = new TempClass(); // «Создаём TempClass» trace(tempObject.newValue); // 1 } } }

Помните: обязательно ставить префикс this, обращаясь к динамичным перемнным. Также следует учитывать, что методы класса Object динамичны и определены прототипом (поэтому не могу перекрываться при помощи override). также следует отметить, что tempObject имеет тип «*» вместо TempClass. Потому что TempClass распознаётся всего лишь как функция в AS3.0, не класс, хотя может использоваться и как класс. Все динамические классы (созданные как TempClass) всегда будут распознаваться как функции (хотя и существует тип Class), поэтому созданные таким путём классы всегда порождают собой экземпляры простых объектов.

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

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

Ключевое слово override Регулярные выражения RegExp
  1. Пока без комментариев.
  1. Пока нету.