パッケージflash.utils
Classpublic class Proxy
継承Proxy Inheritance Object
Subclasses AbstractService, ConfigMap, DescribeTypeCacheRecord, ListCollectionView, ObjectProxy, OLAPCube, OLAPElement

Proxy クラスでは、オブジェクトに対する ActionScript 操作 (プロパティの取得や変更など) のデフォルトの動作をオーバーライドできます。

Proxy クラスにはコンストラクタがないため、Proxy をインスタンス化しないでください。代わりに、Proxy クラスをサブクラス化して getProperty などのメソッドを上書きし、カスタムビヘイビアを指定します。メソッドをオーバーライドせずに Proxy クラスのメソッドを使用しようとすると、例外が発生します。

また、Proxy クラスのメソッドを上書きする独自のコードによって、意図しない形で例外がスローされる場合があります。これらのメソッドの使用時に例外がスローされると、(inisdeleteなどの演算子を使用する) 呼び出し元コードで例外が予期されていないため、問題が発生します。メソッドの上書きによって例外がスローされないことを確認しない限り、演算子によってメソッドを呼び出す際に致命的なエラーが発生することを避けるため、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 クラスは ActionScript 2.0 の Object.__resolve および Object.addProperty 機能の後継です。これらの機能は、ActionScript 3.0 では使用できなくなります。Object.addProperty() 機能を使用すると、ActionScript 2.0 の get および set メソッドを動的に作成できます。ActionScript 3.0 では、コンパイル時に get および set メソッドが提供されますが、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):*

関数として呼び出し可能なオブジェクトプロパティの動作をオーバーライドします。オブジェクトのメソッドが呼び出されるときに、このメソッドが呼び出されます。関数として呼び出し可能なオブジェクトもありますが、関数として呼び出し可能なオブジェクトプロパティもあります。

パラメータ

name:* — 呼び出されるメソッドの名前です。
 
... rest — 呼び出されるメソッドの引数を指定する配列です。

戻り値
* — 呼び出したメソッドの戻り値です。

関連項目

deleteProperty()メソッド 
flash_proxy function deleteProperty(name:*):Boolean

プロパティを削除する要求をオーバーライドします。プロパティが delete 操作で削除されると、このメソッドが呼び出されて削除が実行されます。

パラメータ

name:* — 削除するプロパティの名前です。

戻り値
Boolean — プロパティが削除された場合は true、それ以外は false を返します。

関連項目

getDescendants()メソッド 
flash_proxy function getDescendants(name:*):*

descendant 演算子の使用をオーバーライドします。descendant 演算子が使用されると、このメソッドが呼び出されます。

パラメータ

name:* — オブジェクト内で下位に移動して検索するプロパティの名前です。

戻り値
*descendant 演算子の結果です。

関連項目

getProperty()メソッド 
flash_proxy function getProperty(name:*):*

プロパティの値に対する要求をオーバーライドします。プロパティが見つからなかった場合、このメソッドは undefined を返します。この動作について詳しくは、ECMA-262 言語仕様 Edition 3 のセクション 8.6.2.1 を参照してください。

パラメータ

name:* — 取得するプロパティの名前です。

戻り値
* — 指定されたプロパティ。プロパティが見つからなかった場合は undefined が返されます。

関連項目

hasProperty()メソッド 
flash_proxy function hasProperty(name:*):Boolean

オブジェクトが特定のプロパティを持っているかどうかをプロパティ名によってチェックする要求をオーバーライドします。

パラメータ

name:* — チェックするプロパティの名前です。

戻り値
Boolean — パラメータが存在する場合は true、それ以外は false を返します。

関連項目

isAttribute()メソッド 
flash_proxy function isAttribute(name:*):Boolean

指定された QName が属性としてマークされているかどうかを確認します。

パラメータ

name:* — チェックするプロパティの名前です。

戻り値
Boolean — 属性としてマークされている QName が name の属性である場合、true を返します。

関連項目

nextName()メソッド 
flash_proxy function nextName(index:int):String

インデックス番号を使用して、プロキシになるオブジェクトのプロパティを列挙してプロパティ名を取得できます。ただし、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 — オブジェクトのプロパティを示す、0 から始まるインデックス値です。

戻り値
String — String - プロパティの名前です。

関連項目

nextNameIndex()メソッド 
flash_proxy function nextNameIndex(index:int):int

インデックス番号を使用して、プロキシになるオブジェクトのプロパティを列挙できます。ただし、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 — 列挙を開始する位置を示す、0 から始まるインデックス値です。

戻り値
int — プロパティのインデックス値です。

関連項目

nextValue()メソッド 
flash_proxy function nextValue(index:int):*

インデックス番号を使用して、プロキシになるオブジェクトのプロパティを列挙してプロパティ値を取得できます。ただし、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 — オブジェクトのプロパティを示す、0 から始まるインデックス値です。

戻り値
* — プロパティの値です。

関連項目

setProperty()メソッド 
flash_proxy function setProperty(name:*, value:*):void

プロパティの値を変更する呼び出しをオーバーライドします。プロパティが見つからなかった場合、このメソッドは、指定された名前および値を使用してプロパティを作成します。

パラメータ

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




 

このページに新しいコメントが追加された場合に、電子メールでの通知を希望する。 | コメントレポート

現在のページ: http://livedocs.adobe.com/flex/3_jp/langref/flash/utils/Proxy.html