コメントの表示 | RSS フィード

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 Player 6

パラメータ

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

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

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

戻り値

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

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

// Create a new object
var myObject:Object = new Object();

// Add a property that tracks speed
myObject.speed = 0;

// Write the callback function to be executed if the speed property changes
var speedWatcher:Function = function(prop, oldVal, newVal, speedLimit) {
    // Check whether speed is above the limit
    if (newVal > speedLimit) {
    trace ("You are speeding.");
    }
    else {
    trace ("You are not speeding.");
    }
    
    // Return the value of newVal.
    return newVal;
}
// Use watch() to register the event handler, passing as parameters:
// - the name of the property to watch: "speed"
// - a reference to the callback function speedWatcher
// - the speedLimit of 55 as the userData parameter
myObject.watch("speed", speedWatcher, 55);

// set the speed property to 54, then to 57
myObject.speed = 54; // output: You are not speeding
myObject.speed = 57; // output: You are speeding

// unwatch the object
myObject.unwatch("speed");
myObject.speed = 54; // there should be no output

関連項目

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


Comments


Fumio Nonaka が Oct 30, 2005 の 11:58 AM に追加:
[原文]:
「ただし、Object.watch()はプロパティを評価し、callback関数を呼び出
すかどうかを決定する必要があります。getter/setterプロパティを使用す
ると、Object.watch()はプロパティを常に評価する必要があり、非効率的
です。」

[修正案]:
「しかし、Object.watch()はプロパティを評価して、callback関数を呼
び出すかどうかを決定する必要があります。getter/setterプロパティに
対して用いると、Object.watch()がプロパティを常に評価しなければな
らなくなり、非効率です。」

原文では、「getter/setter プロパティを使用する」ことが「非効率
的」であるかのように解釈できます。

 

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

現在のページ: http://livedocs.adobe.com/flash/8_jp/main/00002591.html