Язык версии : | ActionScript 3.0 |
Версии среды выполнения: | AIR 1.0, Flash Player 9 |
Класс Proxy позволяет переопределять поведение по умолчанию для операций ActionScript (например, для получения и модификации свойств) над объектом.
У класса Proxy нет конструктора, поэтому не следует пытаться создать экземпляр этого класса. Вместо этого сделайте класс Proxy подклассом, чтобы переопределить методы (например, getProperty
) и обеспечить нужное поведение. Если попытаться использовать метод класса Proxy без переопределения метода, возникает исключение.
И следует помнить о том, что код, который переопределяет методы класса Proxy, может непреднамеренно вызывать исключения. Возникновение исключений при использовании этих методов порождает проблемы, поскольку вызывающий код (в котором используются такие операторы, как in
, is
, delete
и другие) не предполагает исключений. В случае, если переопределяющий метод может вызывать исключения, Adobe рекомендует помещать реализацию класса Proxy между операторами try..catch
, которые помогут избежать критических ошибок в случае вызова методов инструкциями. Например,
dynamic class MyProxy extends Proxy {
flash_proxy override function callProperty(name:*, ...rest):* {
try {
// custom code here
}
catch (e:Error) {
// respond to error here
}
}
Класс Proxy заменяет функции Object.__resolve
и Object.addProperty
ActionScript 2.0, которые отсутствуют в ActionScript 3.0. Компонент Object.addProperty()
позволял динамически создавать в ActionScript 2.0 методы get и set. Хотя ActionScript 3.0 обеспечивает эти методы во время компиляции, без использования класса Proxy их нельзя динамически назначать объектам.
Во избежание конфликтов с пространством имен public
методы класса Proxy находятся в пространстве имен flash_proxy
.
Когда методам класса Proxy передается аргумент name
, name
может быть объектом String или QName (если используются пространства имен).
Посмотреть примеры
flash_proxy function callProperty(name:*, ... rest):*
Язык версии : | ActionScript 3.0 |
Версии среды выполнения: | AIR 1.0, Flash Player 9 |
Переопределяет поведение свойства объекта, которое может быть вызвано как функция. Этот метод вызывается при вызове методов объектов. Некоторые объекты можно вызывать как функции. Некоторые свойства объекта также можно вызывать как функции.
Параметры
| name:* — Имя вызываемого метода.
|
|
| ... rest — Массив аргументов вызываемого метода.
|
Возвращает | * — Значение, которое возвращает вызываемый метод.
|
См. также
flash_proxy function deleteProperty(name:*):Boolean
Язык версии : | ActionScript 3.0 |
Версии среды выполнения: | AIR 1.0, Flash Player 9 |
Переопределяет запрос на удаление свойства. Когда свойство удаляется с помощью оператора delete
, для удаления вызывается этот метод.
Параметры
| name:* — Имя удаляемого свойства.
|
Возвращает | Boolean — Если свойство удалено, указывается значение true ; в противном случае выбирается значение false .
|
См. также
flash_proxy function getDescendants(name:*):*
Язык версии : | ActionScript 3.0 |
Версии среды выполнения: | AIR 1.0, Flash Player 9 |
Переопределяет использование оператора descendant
. Этот метод вызывается при использовании оператора descendant
.
Параметры
| name:* — Имя искомого свойства в объекте.
|
Возвращает | * — Результаты оператора descendant .
|
См. также
flash_proxy function getProperty(name:*):*
Язык версии : | ActionScript 3.0 |
Версии среды выполнения: | AIR 1.0, Flash Player 9 |
Переопределяет любой запрос значения свойства. Если свойство не удается найти, метод возвращает значение undefined
. Дополнительные сведения об этом поведении см. в спецификации языка ECMA-262, 3-е издание, раздел 8.6.2.1.
Параметры
| name:* — Имя получаемого свойства
|
Возвращает | * — Указанное свойство или undefined , если свойство не найдено.
|
См. также
flash_proxy function hasProperty(name:*):Boolean
Язык версии : | ActionScript 3.0 |
Версии среды выполнения: | AIR 1.0, Flash Player 9 |
Переопределяет запрос на проверку наличия у объекта конкретного свойства по имени.
Параметры
| name:* — Имя проверяемого свойства.
|
Возвращает | Boolean — Если свойство существует, указывается значение true ; в противном случае выбирается значение false .
|
См. также
flash_proxy function isAttribute(name:*):Boolean
Язык версии : | ActionScript 3.0 |
Версии среды выполнения: | AIR 1.0, Flash Player 9 |
Проверяет, помечен ли предоставленный QName также как атрибут.
Параметры
| name:* — Имя проверяемого свойства.
|
Возвращает | Boolean — Возвращает true , если аргумент для name имеет тип QName, который также помечен, как атрибут.
|
См. также
flash_proxy function nextName(index:int):String
Язык версии : | ActionScript 3.0 |
Версии среды выполнения: | AIR 1.0, Flash Player 9 |
Разрешает перечисление свойств объекта с прокси по номеру позиции индекса для получения имен свойств. При этом свойства самого класса Proxy перечислять нельзя. Эта функция поддерживает реализацию циклов for...in
и for each..in
в объекте для получения нужных имен.
Например, (с кодом из Proxy.nextNameIndex()
):
protected var _item:Array; // array of object's properties
override flash_proxy function nextNameIndex (index:int):int {
// initial call
if (index == 0) {
_item = new Array();
for (var x:* in _target) {
_item.push(x);
}
}
if (index < _item.length) {
return index + 1;
} else {
return 0;
}
}
override flash_proxy function nextName(index:int):String {
return _item[index - 1];
}
Параметры
| index:int — Отсчитываемое от нуля значение индекса для свойства объекта.
|
ВозвращаетСм. также
flash_proxy function nextNameIndex(index:int):int
Язык версии : | ActionScript 3.0 |
Версии среды выполнения: | AIR 1.0, Flash Player 9 |
Разрешает перечисление свойств объекта с прокси по номеру позиции индекса. При этом свойства самого класса Proxy перечислять нельзя. Эта функция поддерживает реализацию циклов for...in
и for each..in
в объекте для получения значений индекса свойства.
Например,
protected var _item:Array; // array of object's properties
override flash_proxy function nextNameIndex (index:int):int {
// initial call
if (index == 0) {
_item = new Array();
for (var x:* in _target) {
_item.push(x);
}
}
if (index < _item.length) {
return index + 1;
} else {
return 0;
}
}
override flash_proxy function nextName(index:int):String {
return _item[index - 1];
}
Параметры
| index:int — Отсчитываемое от нуля значение индекса, с которого начинается перечисление.
|
Возвращает | int — Значение индекса свойства.
|
См. также
flash_proxy function nextValue(index:int):*
Язык версии : | ActionScript 3.0 |
Версии среды выполнения: | AIR 1.0, Flash Player 9 |
Разрешает перечисление свойств объекта с прокси по номеру позиции индекса для получения значений свойств. При этом свойства самого класса Proxy перечислять нельзя. Эта функция поддерживает реализацию циклов for...in
и for each..in
в объекте для получения нужных значений.
Например, (с кодом из Proxy.nextNameIndex()
):
protected var _item:Array; // array of object's properties
override flash_proxy function nextNameIndex (index:int):int {
// initial call
if (index == 0) {
_item = new Array();
for (var x:* in _target) {
_item.push(x);
}
}
if (index < _item.length) {
return index + 1;
} else {
return 0;
}
}
override flash_proxy function nextName(index:int):String {
return _item[index - 1];
}
Параметры
| index:int — Отсчитываемое от нуля значение индекса для свойства объекта.
|
ВозвращаетСм. также
flash_proxy function setProperty(name:*, value:*):void
Язык версии : | ActionScript 3.0 |
Версии среды выполнения: | AIR 1.0, Flash Player 9 |
Переопределяет вызов для изменения значения свойства. Если свойство не удается найти, этот метод создает свойство с указанным именем и значением.
Параметры
| name:* — Имя изменяемого свойства
|
|
| value:* — Значение, которое присваивается свойству.
|
См. также
package {
import flash.display.Sprite;
public class ProxyExample extends Sprite {
public function ProxyExample() {
var arr:ProxyArray = new ProxyArray();
arr.push(1);
arr.push(-2);
arr.push(3);
arr.push(4);
arr.push("five");
trace(arr.length); // 5
trace(arr[0]); // 1
trace(arr[1]); // -2
trace(arr[2]); // 3
trace(arr[3]); // 4
trace(arr.sum()); // 6
arr.clear();
trace(arr); // (empty string)
arr[0] = "zero";
trace(arr); // zero
}
}
}
import flash.utils.Proxy;
import flash.utils.flash_proxy;
dynamic class ProxyArray extends Proxy {
private var _item:Array;
public function ProxyArray() {
_item = new Array();
}
override flash_proxy function callProperty(methodName:*, ... args):* {
var res:*;
switch (methodName.toString()) {
case 'clear':
_item = new Array();
break;
case 'sum':
var sum:Number = 0;
for each (var i:* in _item) {
// ignore non-numeric values
if (!isNaN(i)) {
sum += i;
}
}
res = sum;
break;
default:
res = _item[methodName].apply(_item, args);
break;
}
return res;
}
override flash_proxy function getProperty(name:*):* {
return _item[name];
}
override flash_proxy function setProperty(name:*, value:*):void {
_item[name] = value;
}
}
© 2004-2008 Adobe Systems Incorporated. All rights reserved.
Wed Sep 24 2008, 07:56 AM -07:00