您的位置:首页 > 运维架构

FireFox下因为不支持onPropertyChange,watch方法来代替

2013-08-04 23:39 295 查看


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 方法。
在一个属性上只能注册单个监视点。在同一属性上,对 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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: