| パッケージ | flash.utils |
| Class | public class Proxy |
| 継承 | Proxy Object |
| Subclasses | AbstractService, ConfigMap, DescribeTypeCacheRecord, ListCollectionView, ObjectProxy, OLAPCube, OLAPElement |
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 オブジェクト (名前空間を使用する場合) のいずれかにすることができます。
| メソッド | 定義元 | ||
|---|---|---|---|
関数として呼び出し可能なオブジェクトプロパティの動作をオーバーライドします。 | Proxy | ||
プロパティを削除する要求をオーバーライドします。 | Proxy | ||
descendant 演算子の使用をオーバーライドします。 | Proxy | ||
プロパティの値に対する要求をオーバーライドします。 | Proxy | ||
オブジェクトが特定のプロパティを持っているかどうかをプロパティ名によってチェックする要求をオーバーライドします。 | Proxy | ||
指定された QName が属性としてマークされているかどうかを確認します。 | Proxy | ||
インデックス番号を使用して、プロキシになるオブジェクトのプロパティを列挙してプロパティ名を取得できます。 | Proxy | ||
インデックス番号を使用して、プロキシになるオブジェクトのプロパティを列挙できます。 | Proxy | ||
インデックス番号を使用して、プロキシになるオブジェクトのプロパティを列挙してプロパティ値を取得できます。 | Proxy | ||
プロパティの値を変更する呼び出しをオーバーライドします。 | 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:* — プロパティに設定する値です。
|
関連項目
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