| Версии среды выполнения: | Flash Player 9, AIR 1.0, Flash Lite 4 |
new, и им можно динамически присвоить свойства. Объекты могут также создаваться путем присвоения литерала объекта (см. ниже):
var obj:Object = {a:"foo", b:"bar"}Все классы, которые не объявляют базовый класс явным образом, расширяют встроенный класс Object.
Класс Object можно использовать для создания массивов ассоциативных элементов. В сущности, массив ассоциативных элементов является экземпляром класса Object, и каждая пара «ключ-значение» представлена свойством и его значением. Еще одна причина объявить массив ассоциативных элементов с помощью типа данных Object состоит в том, что после этого можно использовать литерал объекта, чтобы заполнить массив ассоциативных элементов (но только в тот раз, когда он объявлен). В следующем примере массив ассоциативных элементов создается с помощью литерала объекта, доступ к элементам выполняется как с помощью оператора-точки, так и посредством оператора доступа к массиву, а затем путем создания нового свойства создается новая пара ключ-значение:
var myAssocArray:Object = {fname:"John", lname:"Public"};
trace(myAssocArray.fname); // John
trace(myAssocArray["lname"]); // Public
myAssocArray.initial = "Q";
trace(myAssocArray.initial); // QActionScript 3.0 имеет два типа наследования: наследование классов и наследование прототипов:
- Наследование классов — это первичный механизм наследования, поддерживающий наследование фиксированных свойств. Фиксированное свойство — это переменная, константа или метод, объявленные как часть определения класса. Каждое определение класса представлено сейчас особым объектом класса, в котором хранится информация о классе.
- Наследование прототипов является единственным механизмом наследования в предшествующих версиях ActionScript и альтернативной формой наследования в ActionScript 3.0. Каждый класс имеет связанный объект прототипа, и свойствами объекта прототипа обладают все экземпляры класса. При создании экземпляра класса он имеет ссылку на объект прототипа для этого класса, который служит связующим звеном между экземпляром и связанным объектом прототипа класса. Если во время выполнения в экземпляре класса не найдено свойство, наличие свойства проверяется у делегата, в роли которого выступает объект прототипа класса. Если объект прототипа не содержит свойства, этот процесс выполняется по отношению к делегату объекта прототипа. При этом проверка производится последовательно на все более и более высоких уровнях иерархии до тех пор, пока среда выполнения Flash не найдет свойство.
Наследование классов и наследование прототипов может выполняться одновременно, как показано в следующем примере.
class A {
var x = 1
prototype.px = 2
}
dynamic class B extends A {
var y = 3
prototype.py = 4
}
var b = new B()
b.x // 1 via class inheritance
b.px // 2 via prototype inheritance from A.prototype
b.y // 3
b.py // 4 via prototype inheritance from B.prototype
B.prototype.px = 5
b.px // now 5 because B.prototype hides A.prototype
b.px = 6
b.px // now 6 because b hides B.prototypeЗаменив класс функциями, можно создавать пользовательские деревья наследования прототипов. В случае классов дерево наследования прототипов аналогично дереву наследования классов. Однако, поскольку объекты прототипов являются динамическими, можно добавить или удалить свойства, основанные на прототипах во время выполнения.
Связанные элементы API
| Свойство | Определено | ||
|---|---|---|---|
| constructor : Object
Ссылка на объект класса или функцию конструктора для данного экземпляра объекта. | Object | ||
| prototype : Object [статические]
Ссылка на модель объекта класса или функции. | Object | ||
| Метод | Определено | ||
|---|---|---|---|
Object()
Создает объект Object и сохраняет ссылку на метод конструктора объекта в свойстве constructor объекта. | Object | ||
Показывает, определено ли заданное свойство для объекта. | Object | ||
Показывает, есть ли экземпляр класса Object в цепи прототипов объекта, заданного в качестве параметра. | Object | ||
Показывает наличие заданного свойства и его перечисляемость. | Object | ||
Задает доступность динамического свойства для операций цикла. | Object | ||
Возвращает строковое представление этого объекта, отформатированного в соответствии со стандартами, принятыми для данной локали. | Object | ||
Возвращает строковое представление заданного объекта. | Object | ||
Возвращает элементарное значение заданного объекта. | Object | ||
constructor | свойство |
public var constructor:Object| Версии среды выполнения: | Flash Player 9, Flash Lite 4, Flash Player 9, AIR 1.0 |
Ссылка на объект класса или функцию конструктора для данного экземпляра объекта. Если объект представляет собой экземпляр класса, в свойстве constructor содержится ссылка на объект класса. Если объект создается с помощью функции конструктора, свойство constructor содержит ссылку на эту функцию конструктора. Функцию конструктора не следует путать с методом конструктора для класса. Функция конструктора — это объект Function, используемый для создания объектов и применяемый при определении классов наряду с ключевым словом class.
Если ключевое слово class используется для определения класса, объекту прототипа класса присваивается свойство constructor, в котором содержится ссылка на объект класса. Экземпляр класса наследует это свойство из объекта прототипа. Например, следующий код создает новый класс A и экземпляр класса myA:
dynamic class A {}
trace(A.prototype.constructor); // [class A]
trace(A.prototype.constructor == A); // true
var myA:A = new A();
trace(myA.constructor == A); // trueОпытные пользователи могут выбрать ключевое слово function вместо слова class, чтобы определить объект Function, который можно использовать в качестве шаблона при создании объектов. Такая функция называется функцией конструктора, поскольку ее можно применять в сочетании с оператором new для создания объектов. Если ключевое слово function используется для создания функции конструктора, объекту прототипа класса присваивается свойство constructor, в котором содержится ссылка на функцию конструктора. Если затем функция конструктора используется для создания объекта, объект наследует свойство constructor из объекта прототипа функции конструктора. Например, следующий код создает новую функцию конструктора f и объект с именем myF:
function f() {}
trace(f.prototype.constructor); // function Function() {}
trace(f.prototype.constructor == f); // true
var myF = new f();
trace(myF.constructor == f); // trueПримечание. Свойство constructor является записываемым. Это означает, что код пользователя может изменить его значение с помощью инструкции присваивания. Не рекомендуется изменять значение свойства constructor, но если создается код, зависящий от значения свойства constructor, необходимо убедиться, что это значение не сброшено. Значение может изменяться только тогда, когда доступ к данному свойству выполняется с помощью объекта прототипа (например, className.prototype.constructor).
При выполнении доступа к свойству constructor и компиляции в строгом режиме во время компиляции выводится ошибка, так как свойство конструктора зависит от объекта прототипа, который является сущностью среды выполнения. Если используется стандартный режим или если описание класса — «динамический», код выполняется без ошибок.
Связанные элементы API
prototype | свойство |
public static var prototype:Object| Язык версии: | ActionScript 3.0 |
| Версии среды выполнения: | Flash Player 9, AIR 1.0, Flash Lite 4 |
Ссылка на модель объекта класса или функции. Автоматически создается свойство prototype, которое присваивается любому созданному классу или объекту функции. Это свойство является статическим, так как относится только к созданному классу или функции. Например, если создается класс, значение свойства prototype используется всеми экземплярами класса и доступно только как свойство класса. Экземпляры класса не могут напрямую обращаться к свойству prototype.
Объект прототипа класса — это особый экземпляр данного класса, обеспечивающий механизм распространения состояния на все экземпляры класса. Если во время выполнения в экземпляре класса не найдено свойство, наличие свойства проверяется у делегата, в роли которого выступает объект прототипа класса. Если объект прототипа не содержит свойства, этот процесс выполняется по отношению к делегату объекта прототипа. При этом проверка производится последовательно на все более и более высоких уровнях иерархии до тех пор, пока среда выполнения Flash не найдет свойство.
Примечание. В ActionScript 3.0 наследование прототипов не является основным механизмом наследования. Главный механизм наследования в ActionScript 3.0 — это наследование классов, обеспечивающее наследование фиксированных свойств в определениях классов.
Object | () | Конструктор |
public function Object()| Версии среды выполнения: | Flash Player 9, AIR 1.0, Flash Lite 4 |
Создает объект Object и сохраняет ссылку на метод конструктора объекта в свойстве constructor объекта.
hasOwnProperty | () | метод |
AS3 function hasOwnProperty(name:String):Boolean| Язык версии: | ActionScript 3.0 |
| Версии среды выполнения: | Flash Player 9, AIR 1.0, Flash Lite 4 |
Показывает, определено ли заданное свойство для объекта. Этот метод возвращает значение true, если у целевого объекта есть свойство, совпадающее со строкой, указанной параметром name. В противном случае указывается значение false. Следующие типы свойств заставляют метод возвращать значение true для объектов, которые являются экземплярами классов (в отличие от объектов класса):
- фиксированные свойства экземпляра — переменные, константы или методы, определенные классом объекта и не являющиеся статическими;
- унаследованные фиксированные свойства экземпляра — переменные, константы или методы, унаследованные классом объекта;
- динамические свойства — свойства, добавленные в объект после того, как были созданы его экземпляры (за рамками определения класса). Чтобы добавить динамические свойства, определяющий класс объекта должен объявляться с ключевым словом
dynamic.
Следующие типы свойств заставляют метод возвращать значение false для объектов, которые являются экземплярами класса:
- статические свойства — переменные, константы или методы, определенные с помощью статического ключевого слова в определяющем классе объекта или любом из его суперклассов;
- свойства прототипа — свойства, определенные в отношении объекта прототипа, который принадлежит цепи прототипов объекта. В ActionScript 3.0 цепочка прототипов не используется для наследования классов. Тем не менее, она существует и используется в качестве альтернативного механизма наследования. Например, экземпляр класса Array может вызывать метод
valueOf(), поскольку он существует в прототипеObject.prototype, входящем в цепь для класса Array. Хотя методvalueOf()можно использовать по отношению к экземпляру Array, параметрhasOwnProperty("valueOf")принимает для этого экземпляра значениеfalse.
В ActionScript 3.0 тоже есть объекты классов, которые прямо представляют определения классов. Когда метод hasOwnProperty() вызывается по отношению к объектам класса, то значение true присваивается только в том случае, если свойство является статическим и определено в данном объекте класса. Например, если создается подкласс Array под названием CustomArray и в CustomArray определяется статическое свойство с именем foo, вызов CustomArray.hasOwnProperty("foo") возвращает значение true. Однако для статического свойства DESCENDING, определенного в классе Array, вызов CustomArray.hasOwnProperty("DESCENDING") возвращает значение false.
Примечание. Методы класса Object динамически создаются в прототипе Object. Чтобы переопределить этот метод в подклассе Object, не используйте ключевое слово override. Например, в подклассе Object вместо переопределения базового класса применяется function hasOwnProperty():Boolean.
Параметры
name:String — Свойство объекта.
|
Boolean — Если у целевого объекта есть свойство, указанное параметром name, выбирается значение true. В противном случае выбирается false.
|
isPrototypeOf | () | метод |
AS3 function isPrototypeOf(theClass:Object):Boolean| Язык версии: | ActionScript 3.0 |
| Версии среды выполнения: | Flash Player 9, AIR 1.0, Flash Lite 4 |
Показывает, есть ли экземпляр класса Object в цепи прототипов объекта, заданного в качестве параметра. Этот метод возвращает значение true, если объект находится в цепи прототипов объекта, указанного параметром theClass. Метод возвращает значение false, если целевой объект отсутствует в цепи прототипов объекта theClass, а параметр theClass не является объектом.
Примечание. Методы класса Object динамически создаются в прототипе Object. Чтобы переопределить этот метод в подклассе Object, не используйте ключевое слово override. Например, в подклассе Object вместо переопределения базового класса применяется function isPrototypeOf():Boolean.
Параметры
theClass:Object — Класс, на который может ссылаться указанный объект.
|
Boolean — Если объект находится в цепи прототипов объекта, указанного параметром theClass, выбирается значение true. В противном случае устанавливается значение false.
|
propertyIsEnumerable | () | метод |
AS3 function propertyIsEnumerable(name:String):Boolean| Язык версии: | ActionScript 3.0 |
| Версии среды выполнения: | Flash Player 9, AIR 1.0, Flash Lite 4 |
Показывает наличие заданного свойства и его перечисляемость. Значение true указывает на то, что свойство существует и может быть перечислено в цикле for..in. Это свойство должно существовать в целевом объекте, поскольку этот метод не проверяет цепи прототипов целевого объекта.
Созданные пользователем свойства перечисляемы, а встроенные свойства, как правило, нет.
Примечание. Методы класса Object динамически создаются в прототипе Object. Чтобы переопределить этот метод в подклассе Object, не используйте ключевое слово override. Например, в подклассе Object вместо переопределения базового класса применяется function propertyIsEnumerable():Boolean.
Параметры
name:String — Свойство объекта.
|
Boolean — Если свойство, указанное параметром name, перечисляемо, появляется значение true. В противном случае присваивается значение false.
|
setPropertyIsEnumerable | () | метод |
public function setPropertyIsEnumerable(name:String, isEnum:Boolean = true):void| Язык версии: | ActionScript 3.0 |
| Версии среды выполнения: | Flash Player 9, AIR 1.0, Flash Lite 4 |
Задает доступность динамического свойства для операций цикла. Это свойство должно существовать в целевом объекте, поскольку этот метод не проверяет цепи прототипов целевого объекта.
Параметры
name:String — Свойство объекта.
| |
isEnum:Boolean (default = true) — Если выбрано значение false, динамическое свойство не появляется в циклах for..in, а метод propertyIsEnumerable() возвращает значение false.
|
Связанные элементы API
toLocaleString | () | метод |
public function toLocaleString():String| Язык версии: | ActionScript 3.0 |
| Версии среды выполнения: | Flash Player 9, AIR 1.0, Flash Lite 4 |
Возвращает строковое представление этого объекта, отформатированного в соответствии со стандартами, принятыми для данной локали.
Внедрение по умолчанию для этого метода не выполняет специфичное для локали форматирование и возвращает ту же самую строку как toString(). Для подклассов должно предоставляться их собственное внедрение с учетом локали, когда это применимо.
Примечание. Методы класса Object динамически создаются в прототипе Object. Чтобы переопределить этот метод в подклассе Object, не используйте ключевое слово override. Например, в подклассе Object вместо переопределения базового класса применяется function toLocaleString():String.
String — Строковое представление этого объекта, отформатированного в соответствии со стандартами, принятыми для данной локали.
|
Связанные элементы API
toString | () | метод |
public function toString():String| Версии среды выполнения: | Flash Player 9, AIR 1.0, Flash Lite 4 |
Возвращает строковое представление заданного объекта.
Примечание. Методы класса Object динамически создаются в прототипе Object. Чтобы переопределить этот метод в подклассе Object, не используйте ключевое слово override. Например, в подклассе Object вместо переопределения базового класса применяется function toString():String.
String — Строковое представление объекта.
|
valueOf | () | метод |
public function valueOf():Object| Версии среды выполнения: | Flash Player 9, AIR 1.0, Flash Lite 4 |
Возвращает элементарное значение заданного объекта. Если у объекта нет элементарного значения, возвращается объект как таковой.
Примечание. Методы класса Object динамически создаются в прототипе Object. Чтобы переопределить этот метод в подклассе Object, не используйте ключевое слово override. Например, в подклассе Object вместо переопределения базового класса применяется function valueOf():Object.
Object — Элементарное значение данного объекта или самого объекта.
|
Связанные элементы API
ObjectExample и Circle используются, чтобы продемонстрировать динамический характер класса Object. Кроме того, показывается, как объекты значений могут быть преобразованы в объекты Shape, а затем добавлены в рабочую область с указанными координатами x и y.
В примере создаются объекты значений firstInitObj и secondInitObj. Пользовательский класс Circle принимает объект значения и циклически обрабатывает его, подставляя совпадающие внутренние свойства вместо свойств, определенных в объекте значения.
package {
import flash.display.Sprite;
public class ObjectExample extends Sprite {
public function ObjectExample() {
var firstInitObj:Object = new Object();
firstInitObj.bgColor = 0xFF0000;
firstInitObj.radius = 25;
firstInitObj.xCenter = 25;
firstInitObj.yCenter = 25;
var firstCircle:Circle = new Circle(firstInitObj);
addChild(firstCircle);
firstCircle.x = 50;
firstCircle.y = 50;
var secondInitObj:Object = {bgColor:0xCCCCCC, radius:50, xCenter:50, yCenter:50};
var secondCircle:Circle = new Circle(secondInitObj);
addChild(secondCircle);
secondCircle.x = 100;
secondCircle.y = 100;
}
}
}
import flash.display.Shape;
class Circle extends Shape {
public var bgColor:Number = 0xFFFFFF;
public var radius:Number = 0;
public var xCenter:Number = 0;
public var yCenter:Number = 0;
public function Circle(initObj:Object) {
for(var i:String in initObj) {
this[i] = initObj[i];
}
draw();
}
public function draw():void {
graphics.beginFill(bgColor);
graphics.drawCircle(xCenter, yCenter, radius);
graphics.endFill();
}
}
Tue Jun 12 2018, 11:34 AM Z