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

来源:互联网 发布:jelly JAVA 编辑:程序博客网 时间:2024/05/21 09:17

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 objectvar myObject:Object = new Object();// Add a property that tracks speedmyObject.speed = 0;// Write the callback function to be executed if the speed property changesvar speedWatcher:Function = function(prop, oldVal, newVal, speedLimit) {// Check whether speed is above the limitif (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 parametermyObject.watch("speed", speedWatcher, 55);// set the speed property to 54, then to 57myObject.speed = 54; // output: You are not speedingmyObject.speed = 57; // output: You are speeding// unwatch the objectmyObject.unwatch("speed");myObject.speed = 54; // there should be no output
原创粉丝点击