| 首页 | 新闻 | 网页 | 设计 | 色彩 | 原创 | 视觉 | 素材 | 动漫 | 酷站 | 策划 | 文案 | 访谈 | 运营 | 编程 | 数据库 | 服务器 | 下载 | 图库 | 
您的位置: 幽幽天空 > 网页 > 网页制作 > Flash教程 > ActionScript教程 > 文章正文 用户登录
用Flash MX制作MO
不需要Flex也可以
Flash MX2004中的
CFMX For F2K4 We
如何开发基于ASP的
利用mx2004打造像
实战Flash mx 200
FlashMX2004的事件
Flash MX 2004 vi
Flash MX 认证考试

mx.utils 包 [3] 之深入Delegate 类           

mx.utils 包 [3] 之深入Delegate 类

作者:佚名 来源:闪吧 作者: LeeFJ 更新:2007-1-13 20:47:15 错误报告 我要投稿

在网上参看了一些资料主要是AOL的,它写的还是比较具体的,但是有一个细节,我当时一直不是很清楚,所以我想写一点自己对Delegate类的理解。以下是Delegate类的代码:

class mx.utils.Delegate extends Object
{
//创建代理的静态方法
static function create(obj:Object, func:Function):Function
{
var f = function()
{
var target = arguments.callee.target;
var func = arguments.callee.func;
return func.apply(target, arguments);
};
f.target = obj;
f.func = func;
return f;
}
//代理的构造函数
function Delegate(f:Function)
{
func = f;
}

private var func:Function;
//非静态方法创建代理。
function createDelegate(obj:Object):Function
{
return create(obj, func);
}
}

这里的核心代码是create静态方法,那么静态方法到到底在做什么呢?create方法必须首先传入两个参数,funcobjObj指定使func作用于什么,为func指定了上下文,说通俗一点就是obj指定了func中的this引用的,这个问题在上次的例子中已经很明显了。那么create方法是如何做的呢?
create方法中又定义了一个函数f

var f = function()
{
var target = arguments.callee.target;
var func = arguments.callee.func;
return func.apply(target, arguments);
};
这里需要说明的是:

1f中声明了一个target变量,这个变量是一个上下文引用,至于target如何获取这个应用关键就在其后的赋值语句:arguments.callee.target;而在稍后的create方法中又有了这个语句:f.target = obj; 于是问题就比较好理解了。被传入到create方法中的obj已经被f函数中的target变量引用。同理可得func也是一样的道理。
2、在函数f中调用了func ,函数f返回了函数func的返回值。就是这个语句:

return func.apply(target, arguments);

最后create方法又返回了f,这样事实上 func是被包在f函数里面了,于是这样就可以得到代理函数引用了。
至于另外两个动态方法实现代理,其原理是一样的。都必须传入objfunc,只是不在同时传入而已。
文章录入:skyuu    责任编辑:skyuu 
  • 上一篇文章:

  • 下一篇文章:
  • 【字体: 】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
    网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)
    发表评论:
    姓名:  评 分: 1分 2分 3分 4分 5分
     
  • 严禁发表危害国家安全、政治、黄色淫秽等内容的评论。
  • 用户需对自己在使用幽幽天空服务过程中的行为承担法律责任。
  • 本站管理员有权保留或删除评论内容。
  • 评论内容只代表机友个人观点,与本网站立场无关。