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
相关文章推荐
- 解析IE, FireFox, Opera 浏览器支持Alpha透明的方法
- ★★★同时支持iexplorer和firefox的javascript复制拷贝信息到剪贴板方法
- 让 Windows7 - 64bit 支持 vs2012 的解决方法(无法启动此程序,因为计算机中丢失 MSVCRTD.dll
- 二叉树的所有路径,因为有些IDE不支持itoa方法,自定义的int->stringstream->string,
- firefox支持webdings字体的方法
- FireFox不支持document.all,可以用document.getElementsByTagName("*") 代替
- 所有浏览器支持的浏览器控制台输出信息的方法,支持IE,FireFox
- Firefox不支持event解决方法
- Firefox不支持event解决方法
- 调css支持firefox、IE6、IE7的方法
- IE、Firefox、Opera和Safari对CSS样式important和*和_的支持 兼容CSS的解决方法及CSS差别
- 调css支持firefox、IE6、IE7的方法
- FireFox不支持InnerText的解决方法
- firefox不支持document.all的解决方法
- IE6和Firefox同时支持PNG透明图片的方法
- 组合框里添加复选框的方法(使用勾选的假象,用图片代替而已,并非QT原生支持)
- Firefox不支持event解决方法
- firefox提示 内容编码错误 无法显示您尝试查看的页面,因为它使用了无效或者不支持的压缩格式
- IE, FireFox, Opera 浏览器支持CSS实现Alpha透明的方法 兼容问题
- FireFox支持innerText的方法