| 言語バージョン: | ActionScript 3.0 |
| ランタイムバージョン: | AIR 1.0 Flash Player 9 |
Proxy クラスでは、オブジェクトに対する ActionScript 操作 (プロパティの取得や変更など) のデフォルトの動作をオーバーライドできます。
Proxy クラスにはコンストラクタがないため、Proxy をインスタンス化しないでください。代わりに、Proxy クラスをサブクラス化して getProperty などのメソッドを上書きし、カスタムビヘイビアーを指定します。メソッドをオーバーライドせずに Proxy クラスのメソッドを使用しようとすると、例外が発生します。
また、Proxy クラスのメソッドを上書きする独自のコードによって、意図しない形で例外がスローされる場合があります。これらのメソッドの使用時に例外がスローされると、(in、is、deleteなどの演算子を使用する) 呼び出し元コードで例外が予期されていないため、問題が発生します。メソッドの上書きによって例外がスローされないことを確認しない限り、演算子によってメソッドを呼び出す際に致命的なエラーが発生することを避けるため、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 オブジェクト (名前空間を使用する場合) のいずれかにすることができます。
例を表示
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 操作で削除されると、このメソッドが呼び出されて削除が実行されます。
パラメータ
戻り値 | Boolean — プロパティが削除された場合は true、それ以外は false を返します。
|
関連項目
flash_proxy function getDescendants(name:*):*| 言語バージョン: | ActionScript 3.0 |
| ランタイムバージョン: | AIR 1.0 Flash Player 9 |
descendant 演算子の使用をオーバーライドします。descendant 演算子が使用されると、このメソッドが呼び出されます。
パラメータ
| name:* — オブジェクト内で下位に移動して検索するプロパティの名前です。
|
戻り値関連項目
flash_proxy function getProperty(name:*):*| 言語バージョン: | ActionScript 3.0 |
| ランタイムバージョン: | AIR 1.0 Flash Player 9 |
プロパティの値に対する要求をオーバーライドします。プロパティが見つからなかった場合、このメソッドは undefined を返します。この動作について詳しくは、ECMA-262 言語仕様 Edition 3 のセクション 8.6.2.1 を参照してください。
パラメータ
戻り値 | * — 指定されたプロパティ。プロパティが見つからなかった場合は 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 — 属性としてマークされている QName が name の属性である場合、true を返します。
|
関連項目
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 — オブジェクトのプロパティを示す、0 から始まるインデックス値です。
|
戻り値関連項目
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 — 列挙を開始する位置を示す、0 から始まるインデックス値です。
|
戻り値関連項目
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 — オブジェクトのプロパティを示す、0 から始まるインデックス値です。
|
戻り値関連項目
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;
}
}
© 2009 Adobe Systems Incorporated. All rights reserved.
Thu Mar 19 2009, 08:51 PM -07:00