watch (Object.watch メソッド)

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

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

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

定義する 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() では監視できません。

使用できるバージョン : ActionScript 1.0、Flash Lite 2.0

パラメータ

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 プロパティが変化すると実行するコールバック関数を書き込む
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"
// - コールバック関数 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 メソッド)