ActionScriptの文書化されていない機能は、誰にとっても興味深いものです。 _globalの文書化されていないスコープを検討してください。
多くの場合、いくつかの重要な問題を解決するには、オブジェクトのプロパティをソートする必要があります。 [出力]パネルにプロパティ値を表示して、デバッグ情報を取得するとします。 別の例は、サーバー上のデータベースにアクセスする場合など、返されるオブジェクトの不明なプロパティのデコードです。 当然、ActionScriptの隠された(ドキュメント化されていない)プロパティをソートし、それらに興味深いものがあるかどうかを確認したいと思います。
Flashインタープリターの観点から見ると、基本的なActionScript for..inループとは、「指定されたオブジェクトを取得し、そのプロパティ(プロパティに格納されているメソッドを含む)ごとにループ本体を実行する」を意味します。 ただし、ActionScriptの組み込みメソッドとプロパティの多くは、for..inループの列挙からデフォルトで除外されています。 プログラマーは、ActionScriptの基礎となるものではなく、プログラムで作成したオブジェクトとプロパティに関心があると想定されるため、組み込みプロパティはfor..in列挙から除外されます。 文書化されていない関数ASSetPropFlags()を使用すると、列挙のために通常は非表示のままであるプロパティとメソッドを表示することができます。
名前が示すように、 ASSetPropFlags()関数を使用すると、ActionScriptからプロパティ保護フラグを設定できます。 フラグは、適切なメソッドとプロパティをfor.in列挙に含める必要があるかどうかをFlash Playerに示します。 ASSetPropFlags()関数を使用すると、カスタムオブジェクトのプロパティとメソッドの書き込み(または列挙)を禁止して、偶発的な変更を防ぐこともできます。 これは、同じSWFファイルで使用されるサードパーティのコンポーネントとの競合を防ぐために、再配布可能なコンポーネントのグローバルプロパティに特に当てはまります。
ASSetPropFlags()関数の仕組みを一般的に見てみましょう。
ASSetPropFlags()を呼び出すための構文は次のとおりです。
ASSetPropFlags(オブジェクト、プロパティ、maskThree、maskFalse)
ここで:
• object-オブジェクトまたはスコープ。
• プロパティ -変更するオブジェクトのプロパティ/メソッド
保護フラグ。 特別な引数nullは「すべてのプロパティ」を意味します。
• mask —設定フラグを定義する整数ビットマスク。 重要なのは、整数の最後の3ビットで、「上書き保護」、「保護の削除」、および「非表示」のフラグを(右から左に)表します。 たとえば、バイナリ値11(16進表記で06、10進表記で6)は、2番目のパラメーターで指定されたプロパティの書き込みと削除を保護しますが、繰り返し実行すると非表示を停止します。
• maskFalse-マスクと同様に機能するが、指定されたフラグをリセットする別の整数ビットマスク。 MacaFalseは、マスクを適用する前に適用されます。
FlashCodersWildページ( http://chattyfig.figleaf.com/flashcoders-wiki/?AssetPropFlags )には、ASSetPropFlags()関数で使用されるさまざまなビットマスクを説明する図が含まれています。
表示したいプロパティ/メソッドは、すべての組み込みActionScriptクラスを含む_globalスコープに属します。 したがって、次のコマンドを実行すると、すべてのActionScriptクラスが完全に検索可能になります。
ASSetPropFlags(_global。Null。6. 1);
次のスニペットには、開いているスコープで見つかったすべてのクラスがリストされています。
// _globalのセキュリティフラグを110(dv。)に設定します。検索可能にするには
ASSetPropFlags(_global。Null。6. 1);
// _globalのオブジェクトを一覧表示します
for(_globalのthisObject){
trace(thisObject);
}
これらのクラスに興味深いものがあるかどうかを調べるために、すべてのプロパティを順番に見ていきます。 検索中にクラスのメソッドとプロパティ(ActionScript 1.0および2.0)を格納するプロトタイププロパティが見つかった場合、そのコンテンツをソートします。
// _globalのセキュリティフラグを110(dv。)に設定します。検索可能にするには
ASSetPropFlags(_global、null、6、1);
// _globalのオブジェクトを一覧表示します
for(_globalのthisObject){
ASSetPropFlags(_global [thisObject]、null、6、1);
trace( "\ n" + thisObject);
for(props in _global [thisObject]){
トレース( "" +小道具);
//プロトタイプの内容を出力し、
if(props == "prototype"){
ASSetPropFlags(_global [thisObject] .prototype、null、6、1);
for(protoChain in _global [thisObject] .prototype){
trace( "" + protoChain);
}
}
}
}
このコードをフレーム1に添付してFlash MX 2004でムービーをテストすると、
メソッドとプロパティを含むドキュメント化されたクラスの長いリストを表示します。
翻訳( FLASH HACKS(O'Reily) )