Flash Lite 2.x および 3.0 ヘルプ

watch (Object.watch メソッド)

public watch(name:String, callback:Function, [userData:Object]) : Boolean

ActionScript オブジェクトの指定されたプロパティの変更に応じて呼び出されるイベントハンドラを登録します。プロパティが変更されると、イベントハンドラはそれを含むオブジェクト myObject と共に呼び出されます。

callback メソッド定義で return ステートメントを使用して、監視しているプロパティの値に影響を与えることができます。callback メソッドによって返される値は、監視対象のオブジェクトプロパティに割り当てられます。プロパティへの変更を監視するか、変更するか、または禁止するかによって、戻り値の選択は異なります。

  • 単にプロパティを監視する場合は、newVal パラメータを返します。
  • プロパティの値を変更する場合は、固有の値を返します。
  • プロパティを変更しないようにするには、oldVal パラメータを返します。

定義する callback メソッドに return ステートメントがない場合は、監視対象のオブジェクトプロパティに undefined の値が割り当てられます。

監視ポイントは、変更された newval (または oldval) を返すことにより、値の代入をフィルタリング (または無効化) できます。監視ポイントが設定されているプロパティを削除しても、その監視ポイントは消えません。後でプロパティを再作成するときに、監視ポイントは依然として有効です。監視ポイントを削除するには、Object.unwatch メソッドを使用します。

1 つのプロパティに登録できる監視ポイントは 1 つのみです。同じプロパティに対して Object.watch() を続けて呼び出すと、元の監視ポイントが置き換えられます。

Object.watch() メソッドの動作は、JavaScript 1.2 以降の Object.watch() 関数に似ています。主な相違点は、userData パラメータです。これは Flash で Object.watch() に追加されたパラメータであり、Netscape Navigator ではサポートされていません。userData パラメータは、イベントハンドラに渡し、イベントハンドラ内で使用できます。

Object.watch() メソッドでは getter/setter プロパティを監視できません。getter/setter プロパティは遅延評価に基づいて処理されます。つまり、プロパティの値は、プロパティが実際に検索されるまで決定されません。遅延評価では、必要になるまで評価が遅延されるため、プロパティの更新頻度が低い場合には便利です。ただし、Object.watch() はプロパティを評価し、callback 関数を呼び出すかどうかを決定する必要があります。getter/setter プロパティを使用すると、Object.watch() はプロパティを常に評価する必要があり、非効率的です。

通常、ActionScript の定義済みプロパティである _x_y_width、および _height などは getter/setter プロパティであり、Object.watch() では監視できません。

パラメータ

name:String - 監視対象であるオブジェクトプロパティの名前を示すストリング。

callback:Function - 監視対象のプロパティの変更に応じて呼び出す関数。このパラメータは関数オブジェクトです。ストリングとしての関数名ではありません。callback の形式は callback(prop, oldVal, newVal, userData) です。

userData:Object (オプション) - callback メソッドに渡す任意の ActionScript データ。userData パラメータを省略すると、undefined が callback メソッドに渡されます。

戻り値

Boolean - ブール値。監視ポイントが正常に作成された場合は true、それ以外の場合は false を返します。

次の例では、watch() を使用し、speed プロパティが速度制限を超えるかどうかを監視します。

// 新しいオブジェクトを作成します
var myObject:Object = new Object();

// 速度を追跡するプロパティを追加します
myObject.speed = 0;

// speed プロパティが変更された場合に実行される callback 関数を記述します
var speedWatcher:Function = function(prop, oldVal, newVal, speedLimit) {
    // 速度が制限を超えているかどうかをチェックします
    if (newVal > speedLimit) {
    trace ("You are speeding.");
    }
    else {
    trace ("You are not speeding.");
    }
    
    // newVal の値を返します。
    return newVal;
}
// watch() を使用してイベントハンドラを登録し、パラメータとして渡します
// - 監視するプロパティの名前 : "speed"
// - callback 関数 speedWatcher への参照
// - userData パラメータとしての speedLimit、55
myObject.watch("speed", speedWatcher, 55);

// speed プロパティを 54 に設定し、次に 57 に設定します
myObject.speed = 54; // 出力 : You are not speeding
myObject.speed = 57; // 出力 : You are speeding

// オブジェクトを監視しません
myObject.unwatch("speed");
myObject.speed = 54; // 出力はありません

関連項目

addProperty (Object.addProperty メソッド), unwatch (Object.unwatch メソッド)

 

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