Object.watch()

可用性

Flash Player 6。

用法

myObject.watch( prop, callback [, userData] )

参数

prop 一个字符串,表示要监视的对象属性的名称。

callback 当监视的属性发生变化时要调用的函数。此参数为函数对象,而非字符串形式的函数名。callback 的格式是 callback(prop, oldval, newval, userData)

userData 传递给 callback 方法的动作脚本数据的任意片段。如果省略 userData 参数,则将 undefined 传递给回调方法。此参数是可选的。

返回

如果监视点创建成功,则返回 true 值;否则,返回 false 值。

说明

方法;注册一个当动作脚本对象的某个指定属性更改时要调用的事件处理函数。当该属性更改时,调用该事件处理函数,并且 myObject 作为包含对象。您必须从 Object.watch 方法返回新值,否则将为监视的对象属性指定值 undefined

通过返回已修改的 newval(或 oldval),监视点可以筛选(或取消)赋值。如果删除已为其
设置了监视点的属性,则该监视点并不消失。如果以后重新创建此属性,则该监视点依然起作用。若要删除监视点,请使用 Object.unwatch 方法。

在一个属性上只能注册一个监视点。对于同一属性,对 Object.watch() 的后续调用会替换原来的监视点。

Object.watch() 方法的行为类似于 Netscape JavaScript 1.2 和更高版本中的 Object.watch() 函数。其主要区别在于 userData 参数,该参数是 Flash 对 Object.watch() 的增补,Netscape Navigator 不支持它。可将 userData 参数传递给事件处理函数,并在该事件处理函数中使
用它。

Object.watch() 方法不能监视 getter/setter 属性。Getter/setter 属性以一种“懒惰计算”的方式进行操作,即直到实际查询属性时才确定属性的值。“懒惰计算”常常效率很高,原因在于属性并非不停地更新;而是在需要时才进行计算。但是,Object.watch() 需要计算属性才能激发此属性上的监视点。若要与 getter/setter 属性一起使用,Object.watch() 必须不断地计算属性,可是这样做的效率很低。

通常,动作脚本的预定义属性(如 _x_y_width_height)为 getter/setter 属性,因此不能用 Object.watch() 进行监视。

示例

此示例列举一个 CheckBox 组件,该组件具有设置每个复选框实例的标签或值的方法:

myCheckBox1.setValue(true);
myCheckBox1.setLabel("new label");
...

为方便起见,可以将复选框的值和标签看作属性。这样使用 Object.watch() 就可以使对值和标签的访问像属性访问一样,而不是像方法调用,如下所示:

// 定义 CheckBox 类的构造函数(从而定义该类)
function CheckBox() {
  ...
  this.watch('value', function (id, oldval, newval){
    ...
  });
  this.watch('label', function(id, oldval, newval){
    ...
  });
}

当值或标签属性被修改时,将调用该组件指定的函数,以执行更新该组件外观和状态所需的任何任务。下面的示例调用 Object.watch() 方法,以通知组件变量已更改,从而导致该组件更新其图形表示形式。

myCheckBox1.value = false;

此语法比前一个语法更简洁:

myCheckBox1.setValue(false);

另请参见

Object.addProperty()Object.unwatch()