Версии среды выполнения: | 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); // Q
ActionScript 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