• 【设为首页】
  • 【收藏闪客居】
当前位置:主页>FLASH AS 编程>AS基础篇>AS 3.0>文章内容
  • AS 3.0 中类似watch的功能
  • 来源: 作者:ycccc8202 2007-09-14 【
AS2 中我们能够直接用watch对一些对象属性的更改进行监测,但是一些实例原有的方法却无法监测,比如mc._x没法用watch来监测

AS3 中提供了Proxy代理类,这样我们能够对对象的原有属性以及自定义属性进行类似AS2中watch的监测.

 
/**
*
* @class:WO(.watch)
* @author:ycccc8202
* @date:2007.8.2
* @example:
* import com.ycccc.utils.WO;
* var mc:MovieClip=new MovieClip();
* var __mc:WO=new WO(mc);
* var arg:String="1234";
* __mc.watch("x",watchFunc);
* function watchFunc(p,o,n,a) {
* trace(arguments);
* return n;
* }
* __mc.x=99;
* __mc.x=100;
* __mc.watch("y",watchFunc,arg);
* __mc.y=101;
* __mc.y=102;
*
**/
package com.ycccc.utils{
import flash.utils.Proxy;
import flash.utils.flash_proxy;
public dynamic class WO extends Proxy {;
private var _obj:*;
private var _watchHashTable:Object;
/**Constructor WO
*
* @param obj:* 对象
*
**/
public function WO(obj:*) {
  _watchHashTable={};
  _obj=obj;
}
/**Public function watch
*
* @param prop:String 属性
* @param callBackFunc:Function 回调函数
* @param arg:*=null 可选参数
*
**/
public function watch(prop:String,callBackFunc:Function,arg:*=null):void {
  _watchHashTable[prop]={};
  _watchHashTable[prop].prop=prop;
  _watchHashTable[prop].oldV=flash_proxy::getProperty(prop);
  _watchHashTable[prop].newV=null;
  _watchHashTable[prop].callBackFunc=callBackFunc;
  _watchHashTable[prop].arg=arg;
}
override flash_proxy function callProperty(methodName:*, ... args):* {
  return _obj[methodName].apply(_obj,args);
}
override flash_proxy function getProperty(name:*):* {
  //trace("getProperty");
  return _obj[name];
}
override flash_proxy function setProperty(name:*, value:*):void {
  //trace("setProperty");
  if (_watchHashTable[name]!=undefined && value!=_watchHashTable[name].oldV) {
   _watchHashTable[name].newV=value;
   _watchHashTable[name].oldV=_watchHashTable[name].callBackFunc.apply(null,[_watchHashTable[name].prop,_watchHashTable[name].oldV,_watchHashTable[name].newV,_watchHashTable[name].arg]);
  }
  _obj[name] = value;
}
}
}

使用::

 
import com.ycccc.utils.WO;
var mc:MovieClip=new MovieClip();
var __mc:WO=new WO(mc);
var arg:String="1234";
__mc.watch("x",watchFunc);
function watchFunc(p,o,n,arg) {
trace(arguments);
return n;
}
__mc.x=99;
__mc.x=100;
__mc.watch("y",watchFunc,arg);
__mc.y=101;
__mc.y=102;
__mc.watch("z",watchFunc,arg);
__mc.z=88
__mc.z=99

PS:也许不太完善,大家可以自行更改~
WO.as类文件放入*fla同目录的com/ycccc/utils/下测试
WO.as




上一篇:AS3中文版帮助_chm   下一篇:addEventListener注册事件进行传递参数的方法
您的评论
  • 用户名:新注册) 密码: 匿名评论
  • 评论内容:(不能超过250字,需审核后才会公布,请自觉遵守互联网相关政策法规)

Copyright © 2006-2008 flashas.net All Rights Reserved.
网站内容咨询: admin#flashas.net (#为@) 联系QQ:40777822 浙ICP备06033001号
(本网站最佳浏览解析度为1024*768, 建议使用IE 6.0或以上版本浏览器。)