Главная / Action Script 3
Пакетflash.utils
Классpublic class Proxy
НаследованиеProxy Inheritance Object

Язык версии : ActionScript 3.0
Версии среды выполнения:  1.0 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 (если используются пространства имен).

Посмотреть примеры



Общедоступные свойства
 СвойствоОпределено
 Inheritedconstructor : Object
Ссылка на объект класса или функцию конструктора для данного экземпляра объекта.
Object
 Inheritedprototype : Object
[статические] Ссылка на модель объекта класса или функции.
Object
Общедоступные методы
 МетодОпределено
 Inherited
Показывает, определено ли заданное свойство для объекта.
Object
 Inherited
Показывает, есть ли экземпляр класса Object в цепи прототипов объекта, заданного в качестве параметра.
Object
 Inherited
Показывает наличие заданного свойства и его перечисляемость.
Object
 Inherited
Задает доступность динамического свойства для операций цикла.
Object
 Inherited
Возвращает строковое представление заданного объекта.
Object
 Inherited
Возвращает элементарное значение заданного объекта.
Object
Защищенные методы
 МетодОпределено
  
callProperty(name:*, ... rest):*
Переопределяет поведение свойства объекта, которое может быть вызвано как функция.
Proxy
  
Переопределяет запрос на удаление свойства.
Proxy
  
Переопределяет использование оператора descendant.
Proxy
  
Переопределяет любой запрос значения свойства.
Proxy
  
Переопределяет запрос на проверку наличия у объекта конкретного свойства по имени.
Proxy
  
Проверяет, помечен ли предоставленный QName также как атрибут.
Proxy
  
Разрешает перечисление свойств объекта с прокси по номеру позиции индекса для получения имен свойств.
Proxy
  
Разрешает перечисление свойств объекта с прокси по номеру позиции индекса.
Proxy
  
nextValue(index:int):*
Разрешает перечисление свойств объекта с прокси по номеру позиции индекса для получения значений свойств.
Proxy
  
setProperty(name:*, value:*):void
Переопределяет вызов для изменения значения свойства.
Proxy
Сведения о методе
callProperty()метод
flash_proxy function callProperty(name:*, ... rest):*

Язык версии : ActionScript 3.0
Версии среды выполнения:  1.0 9

Переопределяет поведение свойства объекта, которое может быть вызвано как функция. Этот метод вызывается при вызове методов объектов. Некоторые объекты можно вызывать как функции. Некоторые свойства объекта также можно вызывать как функции.

Параметры

name:* — Имя вызываемого метода.
 
... rest — Массив аргументов вызываемого метода.

Возвращает
* — Значение, которое возвращает вызываемый метод.

См. также

deleteProperty()метод 
flash_proxy function deleteProperty(name:*):Boolean

Язык версии : ActionScript 3.0
Версии среды выполнения:  1.0 9

Переопределяет запрос на удаление свойства. Когда свойство удаляется с помощью оператора delete, для удаления вызывается этот метод.

Параметры

name:* — Имя удаляемого свойства.

Возвращает
Boolean — Если свойство удалено, указывается значение true; в противном случае выбирается значение false.

См. также

getDescendants()метод 
flash_proxy function getDescendants(name:*):*

Язык версии : ActionScript 3.0
Версии среды выполнения:  1.0 9

Переопределяет использование оператора descendant. Этот метод вызывается при использовании оператора descendant.

Параметры

name:* — Имя искомого свойства в объекте.

Возвращает
* — Результаты оператора descendant.

См. также

getProperty()метод 
flash_proxy function getProperty(name:*):*

Язык версии : ActionScript 3.0
Версии среды выполнения:  1.0 9

Переопределяет любой запрос значения свойства. Если свойство не удается найти, метод возвращает значение undefined. Дополнительные сведения об этом поведении см. в спецификации языка ECMA-262, 3-е издание, раздел 8.6.2.1.

Параметры

name:* — Имя получаемого свойства

Возвращает
* — Указанное свойство или undefined, если свойство не найдено.

См. также

hasProperty()метод 
flash_proxy function hasProperty(name:*):Boolean

Язык версии : ActionScript 3.0
Версии среды выполнения:  1.0 9

Переопределяет запрос на проверку наличия у объекта конкретного свойства по имени.

Параметры

name:* — Имя проверяемого свойства.

Возвращает
Boolean — Если свойство существует, указывается значение true; в противном случае выбирается значение false.

См. также

isAttribute()метод 
flash_proxy function isAttribute(name:*):Boolean

Язык версии : ActionScript 3.0
Версии среды выполнения:  1.0 9

Проверяет, помечен ли предоставленный QName также как атрибут.

Параметры

name:* — Имя проверяемого свойства.

Возвращает
Boolean — Возвращает true, если аргумент для name имеет тип QName, который также помечен, как атрибут.

См. также

nextName()метод 
flash_proxy function nextName(index:int):String

Язык версии : ActionScript 3.0
Версии среды выполнения:  1.0 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 — Отсчитываемое от нуля значение индекса для свойства объекта.

Возвращает
String — Имя свойства.

См. также

nextNameIndex()метод 
flash_proxy function nextNameIndex(index:int):int

Язык версии : ActionScript 3.0
Версии среды выполнения:  1.0 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 — Значение индекса свойства.

См. также

nextValue()метод 
flash_proxy function nextValue(index:int):*

Язык версии : ActionScript 3.0
Версии среды выполнения:  1.0 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 — Отсчитываемое от нуля значение индекса для свойства объекта.

Возвращает
* — Значение свойства.

См. также

setProperty()метод 
flash_proxy function setProperty(name:*, value:*):void

Язык версии : ActionScript 3.0
Версии среды выполнения:  1.0 9

Переопределяет вызов для изменения значения свойства. Если свойство не удается найти, этот метод создает свойство с указанным именем и значением.

Параметры

name:* — Имя изменяемого свойства
 
value:* — Значение, которое присваивается свойству.

См. также

Примеры Как пользоваться примерами
ProxyExample.as

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;
    }
}