watch (Object.watch-Methode)

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

Registriert eine Ereignisprozedur, die aufgerufen werden soll, wenn sich eine festgelegte Eigenschaft eines ActionScript-Objekts ändert. In diesem Fall erfolgt ein Aufruf der Ereignisprozedur mit myObject als Objekt.

Mit der return-Anweisung in der Definition der callback-Methode können Sie den Wert der überwachten Eigenschaft ändern. Der von der callback-Methode zurückgegebene Wert wird der überwachten Objekteigenschaft zugewiesen. Der als Rückgabewert ausgewählte Wert hängt davon ab, ob Sie Änderungen an der Eigenschaft überwachen, ändern oder verhindern möchten.

Wenn die definierte callback-Methode über keine return-Anweisung verfügt, wird der überwachten Objekteigenschaft der Wert undefined zugewiesen.

Ein Watchpoint kann die Wertzuweisung durch Rückgabe eines geänderten newval- oder oldval-Werts filtern (oder annullieren). Wenn Sie eine Eigenschaft löschen, für die ein Watchpoint definiert ist, wird dieser Watchpoint nicht gelöscht. Wenn Sie die Eigenschaft zu einem späteren Zeitpunkt neu erstellen, ist der Watchpoint nach wie vor in Kraft. Verwenden Sie die Methode Object.unwatch, um einen Watchpoint zu entfernen.

Für eine Eigenschaft kann nur jeweils ein Watchpoint definiert werden. Wenn Sie die Methode Object.watch() mehrmals für ein und dieselbe Eigenschaft aufrufen, wird der ursprüngliche Watchpoint ersetzt.

Die Methode Object.watch() verhält sich ähnlich wie die Funktion Object.watch() in JavaScript 1.2 und später. Der Hauptunterschied ist der Parameter userData, eine Flash-spezifische Ergänzung zu Object.watch(), die von Netscape Navigator nicht unterstützt wird. Sie können den Parameter userData an die Ereignisprozedur übergeben und dort verwenden.

Get-/Set-Eigenschaften können mit der Methode Object.watch() nicht überwacht werden. Get-/Set-Eigenschaften operieren nach dem Prinzip der Lazy Evaluation - der Wert einer Eigenschaft wird erst nach der tatsächlichen Abfrage der Eigenschaft ermittelt. In vielen Fällen ist Lazy Evaluation recht effizient, da die Eigenschaft nicht ständig aktualisiert werden muss, sondern nur bei Bedarf ausgewertet wird. Object.watch() muss jedoch eine Eigenschaft bewerten, um zu entscheiden, ob die Funktion callback aufgerufen werden soll. Bei einer Get-/Set-Eigenschaft muss Object.watch() die Eigenschaft ständig auswerten, was nicht effizient ist.

Vordefinierte ActionScript-Eigenschaften wie _x, _y, _width und _height sind im Allgemeinen Get-/Set-Eigenschaften und können nicht mit Object.watch() überwacht werden.

Verfügbarkeit: ActionScript 1.0, Flash Lite 2.0

Parameter

name:String - Ein String. Der Name der zu überwachenden Objekteigenschaft.

callback:Function - Die Funktion, die aufgerufen werden soll, wenn sich die überwachte Eigenschaft ändert. Dieser Parameter ist ein Funktionsobjekt und kein Funktionsname als String. Die Form von callback lautet callback(prop, oldVal, newVal, userData).

userData:Object [optional] - Beliebige ActionScript-Daten, die an die callback-Methode übergeben werden. Beim Weglassen des Parameters userData wird undefined an die Rückrufmethode übergeben.

Rückgabewerte

Boolean - Ein boolescher Wert: true, wenn der Watchpoint erfolgreich erstellt wurde, andernfalls false.

Beispiel

Im folgenden Beispiel wird mit watch() überprüft, ob die Eigenschaft speed die Geschwindigkeitsbegrenzung überschreitet:

// neues Objekt erstellen
var myObject:Object = new Object();

// Eigenschaft zum Verfolgen der Geschwindigkeit hinzufügen
myObject.speed = 0;

// Rückruffunktion, die bei Änderungen der Eigenschaft "speed" auszuführen ist
var speedWatcher:Function = function(prop, oldVal, newVal, speedLimit) {
    // Überschreiten des Grenzwerts für "speed" überprüfen
    if (newVal > speedLimit) {
    trace ("You are speeding.");
    }
    else {
    trace ("You are not speeding.");
    }
    
    // Wert von newVal zurückgeben
    return newVal;
}
// watch() zum Registrieren der Ereignisprozedur verwenden; übergebene Parameter:
// - Name der zu überwachenden Eigenschaft: "speed"
// - Referenz auf die Callback-Funktion "speedWatcher"
// - Wert 55 für "speedLimit" als Parameter "userData"
myObject.watch("speed", speedWatcher, 55);

// Eigenschaft "speed" auf 54 und anschließend auf 57 setzen
myObject.speed = 54; // Ausgabe: You are not speeding
myObject.speed = 57; // Ausgabe: You are speeding

// Überwachung für das Objekt entfernen
myObject.unwatch("speed");
myObject.speed = 54; // keine Ausgabe

Siehe auch

addProperty (Object.addProperty-Methode), unwatch (Object.unwatch-Methode)