パッケージflash.utils
クラスpublic class Proxy
継承Proxy Inheritance Object

言語バージョン : ActionScript 3.0
Player のバージョン : Flash Player 9

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
[static] クラスまたは関数オブジェクトのプロトタイプオブジェクトへの参照です。
Object
パブリック メソッド
 メソッド定義元
 Inherited
オブジェクトに指定されたプロパティが定義されているかどうかを示します。
Object
 Inherited
Object クラスのインスタンスが、パラメータとして指定されたオブジェクトのプロトタイプチェーン内にあるかどうかを示します。
Object
 Inherited
指定されたプロパティが存在し列挙できるかどうかを示します。
Object
 Inherited
ループ処理に対するダイナミックプロパティの可用性を設定します。
Object
 Inherited
指定されたオブジェクトのストリング表現を返します。
Object
 Inherited
指定されたオブジェクトのプリミティブな値を返します。
Object
プロテクト メソッド
 メソッド定義元
  
callProperty(name:*, ... rest):*
関数として呼び出し可能なオブジェクトプロパティの動作を上書きします。
Proxy
  
プロパティを削除する要求を上書きします。
Proxy
  
descendant 演算子の使用をオーバーライドします。
Proxy
  
getProperty(name:*):*
プロパティの値に対する要求を上書きします。
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
Player のバージョン : Flash Player 9

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

パラメータ

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

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

関連項目

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

言語バージョン : ActionScript 3.0
Player のバージョン : Flash Player 9

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

パラメータ

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

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

関連項目

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

言語バージョン : ActionScript 3.0
Player のバージョン : Flash Player 9

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

パラメータ

name:* — オブジェクトに引き継ぐ検索対象のプロパティの名前です。

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

関連項目

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

言語バージョン : ActionScript 3.0
Player のバージョン : Flash Player 9

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

パラメータ

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

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

関連項目

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

言語バージョン : ActionScript 3.0
Player のバージョン : Flash Player 9

オブジェクトが特定のプロパティを持っているかどうかを名前ごとにチェックする要求を上書きします。

パラメータ

name:* — チェックするプロパティの名前を表します。

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

関連項目

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

言語バージョン : ActionScript 3.0
Player のバージョン : Flash Player 9

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

パラメータ

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

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

関連項目

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

言語バージョン : ActionScript 3.0
Player のバージョン : 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 — オブジェクトのプロパティを示す 0 から始まるインデックス値です。

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

関連項目

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

言語バージョン : ActionScript 3.0
Player のバージョン : 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 — 列挙の開始を示す 0 から始まるインデックス値です。

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

関連項目

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

言語バージョン : ActionScript 3.0
Player のバージョン : 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 — オブジェクトのプロパティを示す 0 から始まるインデックス値です。

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

関連項目

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

言語バージョン : ActionScript 3.0
Player のバージョン : Flash Player 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;
    }
}




 

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

現在のページ: http://livedocs.adobe.com/flash/9.0_jp/ActionScriptLangRefV3/flash/utils/Proxy.html