User Guide

Object.watch() 677
The Object.watch() method behaves similarly to the Object.watch() function in JavaScript
1.2 and later. The primary difference is the
userData parameter, which is a Flash addition to
Object.watch() that Netscape Navigator does not support. You can pass the userData
parameter to the event handler and use it in the event handler.
The
Object.watch() method cannot watch getter/setter properties. Getter/setter properties
operate through lazy evaluationthe value of the property is not determined until the property is
actually queried. Lazy evaluation is often efficient because the property is not constantly updated;
it is, rather, evaluated when needed. However,
Object.watch() needs to evaluate a property to
determine whether to invoke the
callback function. To work with a getter/setter property,
Object.watch() needs to evaluate the property constantly, which is inefficient.
Generally, predefined ActionScript properties, such as
_x, _y, _width, and _height, are getter/
setter properties and cannot be watched with
Object.watch().
Example
The following example uses watch() to check whether the speed property exceeds the speed
limit:
// 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
See also
Object.addProperty(), Object.unwatch()