Actionscript2 Delegate研究(中)

HFSS学习记录——0. HFSS软件安装(ANSYS Electromagnetics Suite 2023 R1) HFSS 2023 R1安装步骤 阅读详情

首先看一下Delegate的原始类,它是由Mike Chambers写的。

class com.macromedia.mesh.events.EventProxy
{
        private var receiverObj:Object;
        private var funcName:String;
       
        /*
        Constructor:
        -receiverObj : the receiverObj in which the event will be called
        -the function name to be called in response to the event
        */

        function EventProxy(receiverObj:Object, funcName:String)
        {
                this.receiverObj = receiverObj;
                this.funcName = funcName;
        }
       
        //this is called before the event is broadcast by the components
        private function handleEvent(eventObj:Object):Void
        {
                //if not function name has been defined
                if(funcName == undefined)
                {
                        //pass the call to the event name method
                        receiverObj[eventObj.type](eventObj);
                }
                else
                {
                        //pass the call to the specified method name
                        receiverObj[funcName](eventObj);
                }
        }
}

很明显它只能用在V2组件上面,因为只有组件在addEvenListenr(eventTypeName,proxyInstance )定义之后,发生了eventTypeName事件时自动执行proxyInstance(EventProxy类的实例)的handleEvent事件。其它非V2组件的其它类如XML,MovieClip或者自己定义类的对象都不能执行这个代理。我认为Mike Chambers在写这个类的时候,就是针对组件的事件来考虑的。当然这也可以在他的那篇关于Delegate的文章上看得出来,所以这会误导读者。使读者认为Delegate只为组件服务。

 而Macromedia官方发布的Delegate类是由Mike Chambers的EventProxy类改进得出来的。与EventProxy有两点不同,首先Delegate.create返回的是一个函数,而非像EventProxy 实例化出来的对象;其次就是Delegate针对的不仅仅是组件,还包括其它类的实例。这些可以在上篇中看到。现在来研究一下Delegate的代码:

/**
The Delegate class creates a function wrapper to let you run a function in the context
of the original object, rather than in the context of the second object, when you pass a
function from one object to another.
*/


class mx.utils.Delegate extends Object
{
        /**
        Creates a functions wrapper for the original function so that it runs
        in the provided context.
        @parameter obj Context in which to run the function.
        @paramater func Function to run.
        */

        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的代码分为两段,这样就看得更明显点儿:

static function create(obj:Object, func:Function):Function
{
        var f:Function = proxy;
        f.target = obj;
        f.func = func;
        return f;
}

static function proxy()
{
        var target = arguments.callee.target;
        var func = arguments.callee.func;
        return func.apply(target, arguments);
}

       首先定义了一个Function实例f,然后通过:

        var target = arguments.callee.target;
        var func = arguments.callee.func;

       这两句使得target与f.target(就是arguments.callee.target)保持一个引用。而f.target这时候还没有被赋值,f.func也是一样。直到这两句出现的时候,才被赋上值。

        f.target = obj;
      f.func = func;

    我们可以用一个简单的试验来验证一下:

var a:Object = new Object();
a.c = new Object();
//b
保持对a.c的引用,但这时a.c并没有赋值
//
如果a.c是简单类型,比如10,”abc”就不行了
var b = a.c;
a.c.d = 100
//output
出来的是100.
trace(b.d);

       create返回了一个代理函数f,这个f 在create完的时候没有执行。直到这个函数被调用的时候才执行。而组件也就是在click事件发生后调用这个函数的,所以会执行。

       下篇会继续关注delgate的实现,以及探讨Macromedia未实现的多播委托怎么来实现。

 

企业微信API实战:解密external_userid的跨应用一致性管理 本文深入探讨企业微信API中external_userid的跨应用一致性管理问题,解析其本质及在不同应用场景下的ID不一致挑战。通过ID转换与统一管理方案,结合unionid实现跨应用客户数据整合,提供实战代码示例和架构设计,助力企业构建高效的客户管理系统。 阅读详情

相关推荐

hcaptcha无感验证码逆向实战:从接口分析到环境补全

本文详细解析了hcaptcha无感验证码的逆向实战过程。通过分析核心接口与加密逻辑,重点介绍了采用环境补全策略来模拟真实浏览器环境,从而绕过验证码检测。文章提供了从接口抓包、剖析hsw.js加密核心到使用Node.js搭建模拟环境的完整步骤,为自动化操作提供了一种稳健的解决方案。

weixin_29324401的博客 1156

mx.utils 包 之 深入Delegate 类

深入Delegate 类在网上参看了一些资料主要是AOL的,它写的还是比较具体的,但是有一个细节,我当时一直不是很清楚,所以我想写一点自己对Delegate类的理解。以下是Delegate类的代码:class mx.utils.Delegate extends Object{       //创建代理的静态方法       static function c

LeeFJ的专栏 1311

红外小目标检测新思路:当DETR遇上Mamba状态空间模型,速度提升3倍

本文探讨了将Mamba状态空间模型与DETR框架结合,用于解决红外小目标检测的难题。该创新方案通过线性复杂度的Mamba模块替代传统Transformer的自注意力机制,在保持高检测精度的同时,显著提升了推理速度,实现了实时性能的突破,为无人机巡检、安防监控等场景提供了高效解决方案。

hhh00的博客 666

(UE4 4.20)UE4的委托(Delegate)使用

委托有点类似函数指针,UE4定义了一大堆的委托方便我们的使用 在DelegateCombinations.h文件中的定义了各种委托 #define DECLARE_DELEGATE( DelegateName ) FUNC_DECLARE_DELEGATE( DelegateName, void ) #define DECLARE_MULTICAST_DELEGATE( DelegateNa...

qq_29523119的博客 1万+

LAMMPS模拟新合金没势函数?手把手教你用`pair_style hybrid`混合势函数(附FeCMnSiTi案例)

本文详细介绍了在LAMMPS中如何使用`pair_style hybrid`混合势函数模拟新型高熵合金(如FeCMnSiTi),解决缺乏现成势函数的问题。通过实战案例,涵盖参数查找、命令编写、错误排查等关键步骤,特别适合处理多组元体系的复杂相互作用。文章还提供了EAM势函数与LJ势的组合技巧,帮助研究者准确模拟合金性能。

weixin_30635053的博客 246

Halcon 3D视觉实战:5步将线激光高度数据转为可分析的深度图与点云

本文详细介绍了如何利用Halcon平台将线激光高度数据转换为深度图与点云的5步实战方法。通过具体代码示例和工业检测案例(如锂电池胶水测量),帮助工程师高效处理3D视觉数据,实现从原始数据到三维可视化的完整技术链路。

weixin_29039773的博客 361

ActionScript2 delegate 研究(下)

在上两篇中,我们研究了Macromedia Updater 2的Delegate的用法、起源、实现、优点。然而这个Delegate可以很好的实现一个事件对应一个代理方法。但很多时候不是这样的,有更多的事物需要知道发生了这件事,然后调用自己的处理函数。比如我的一个组件,鼠标按下去的时候,有可能一个Label组件知道这个事件后改变自己的标题changeText(),同时也有可能一个MediaPlayb

AOL's Web Log 2194

拆解人形机器人:核心硬件与驱动系统

本文深入解析人形机器人的核心硬件系统,将其类比为"骨骼+肌肉+神经"的集成体。重点介绍了三大关键组件:驱动单元(无框力矩电机和空心杯电机)、传动单元(谐波减速器和行星滚柱丝杠)以及感知单元(力矩传感器、编码器和IMU)。文章指出一体化关节模组正成为行业趋势,能够实现更紧凑的结构和更高的可靠性。同时分析了硬件价值量分布,强调丝杠、电机等部件是当前技术高地和成本重心。最后指出随着技术进步,机器人价值将更多向"大脑"和"神经"转移。

小明的博客 1530

在线的 Flash ActionScript 2 Class Documents

这两天努力寻找FLASH AS2 的类文档时找到的。链接如下:http://www.visiblearea.com/visdoc/examples/mm/all/index.html如果哪位朋友能有 OffLine 的 AS2的类文档,希望能够与我共享。

CrazyTomato的专栏 1282

使用Kettle进行数据同步(增量)

文章目录kettle介绍kettle安装kettle使用使用kettle同步关系型数据库数据(MySQL示例)1. 创建一个转换2. 选择表输入3. 格式转换4. 执行脚本5. 创建job使用kettle同步NoSql数据(MongoDB示例)创建转换时的注意事项MongoDBInput怎么创建job的创建如何在Linux上面运行已经创建好的job?1、把创建好的job传输到Linux机器上面2、编辑kjb文件3、执行任务 kettle介绍 Kettle 是一款国外开源的 ETL 工具,纯 Java 编写

JenKin的博客 7351

【华为OD机试真题】65、高矮个子排队 | 机试真题+思路参考+代码解析 (C++、Java、Py、C语言、JS)

题目描述 >现在有一队小朋友,他们高矮不同,我们以正整数数组表示这一队小朋友的身高,如数组{5,3,1,2,3}。 >  我们现在希望小朋友排队,以"高" "矮" "高" "矮" 顺序排列,每一个高位置的小朋友要比相邻的位置高或者相等;每个 "矮" 位置的小朋友要比相邻的位置矮或者相等; >  要求小朋友们移动的距离和最小,第一个从“高"位开始排,输出最小移动距离即可。 >  例如,在示范小队{5,3,1,2,3}中, {5, 1, 3, 2, 3}是排序结果。 > 

KJ.JK 2102

【来自JOVEY】Delegate 类的用法

导读:   之前做过的一些项目的程序中,一直会遇到类中方法的调用范围的一些问题,   如以下这段代码是当flash改变大小时执行一个layOut函数:   class mymovie extends MovieClip {   function mymovie() {   var myListener:Object = new Object();   myListener.onResize

The Way To Great 913

130页5万字某市档案馆数字档案馆建设方案

【版权声明】本资料来源网络,仅用于行业知识分享,供个人学习参考,请勿商用。【侵删致歉】如有侵权请联系小编,将在收到信息后第一时间进行删除!完整资料领取见文末,部分资料内容:国家档案局证实颁布《数字档案馆建设指南》, 明确了数字档案馆建设原则、要求、目标,对相关系统建设内容、功能要求进行了概括和详细说明。数字档案馆系统建设应以 OAIS 参考模型为设计基础,以实现数字资源的长期保存与可信管理。设计的数字档案馆系统架构如下图。图-1 数字档案馆体系结构数字档案馆建设包括五大层次和三大保障体系:

zuoan1993的博客 1181

ActionScript2 delegate 研究(上)

委托这个概念在C#/java中用得比较多,有点儿像C++中的函数指针,但比它更先进.这里有msdn对Delegate类的文档:http://msdn.microsoft.com/library/chs/default.asp?url=/library/CHS/cpref/html/frlrfSystemDelegateClassctorTopic.asp然而Actionscript2对Dele

AOL's Web Log 2986

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

让AS2的事件像那么回事儿

用惯了AS3的事件机制,再回来用AS2的事件机制,怎么用怎么不爽。 特别是onRelease,onRollOver...这类鼠标事件,作用域好歹有个Delegate可以帮忙一下,最受不了的是,事件只能定义成一个函数。 好在AS2比较容易hack,随便写了个方法,让函数支持add,remove。用起来还有点像C#的感觉\~o~/ Code 1/** 2*va...

weixin_30364147的博客 138

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

AS3.0教程:强大的事件机制(1)

Event机制作为重头戏,在ActionScript 3.0中加强了很多。更加统一、易用、标准、灵活。 ActionScript 2.0中有众多的事件实现机制: [1b]回顾和比较[/1b] AS1.0玩家最爱用onClipEvent(), on(),又方便又直接。缺点在于逻辑分散到了各个舞台元件中,难以管理和维护。更加别说代码重用了。别跟俺说可以Copy, Paste,这不叫重用,这叫...

wangangie3 177

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

3D旋转菜单

3D旋转菜单目前好像满火的,正好自己也做了一个,分享一下吧(感谢gotoAndLearn提供视频下载)先来看看效果吧:click here(忘了做loading了 )先来说说思路,首先要形成一个椭圆轨迹,这个函数可以这样写复制内容到剪贴板代码:function move_me() {    this._x = Math.cos(this.angle)*r_x+c_x;    this.

太极拳 1191

AS3.0:强大的事件机制(上)

回顾和比较AS1.0玩家最爱用onClipEvent(), on(),又方便又直接。缺点在于逻辑分散到了各个舞台元件中,难以管理和维护。更加别说代码重用了。别跟俺说可以Copy, Paste,这不叫重用,这叫低级。AS2.0中,增加了一些事件处理机制:1.回调函数: onLoad, onComplete等。相信兄弟们最熟悉的应该就是XML.onload回调函数了。2.事件侦听器型:这个就是addL

由雪伟的专栏 3511

【转】Cairngorm+BlazeDS整合Flex+Java的Demo(实例)

转至:http://blog.dreamhui.net/archives/64   今天学习Cairngorm,找了份教程,写了个Demo,以记录并分享学习过程。 Cairngorm的各个部分: ModelLocator:在一个地方存储程序中所有的值对象(ValueObjects,数据)并共享变量。它与HTTP Session对象相类似,不过它存储在Flex客户端,而不是存储在一个中间...

JCracker 224

大型CAx(CAD/CAE/CAPP/CAM)工业软件开发中的关键组件

通过对FreeCAD、SALOME等多款代码的分析研究,发现这些软件在架构设计、模块实现等方面,存在许多相似(同)的技术思想。因此,有必要对这些共性、主流的技术予以总结分析。

国产CAx(CAD/CAE/CAM)软件研发 1万+

Cairngorm示例:用户登录

  1. Cairngorm简介   Cairngorm是一个Flex程序开发框架,基于MVC设计模式。   使用Cairngorm进行开发时我们一般涉及以下几个部件的开发:   ModelLocator:定义Model。ActionScript类,一般采用singleton模式实现,必须   是Bindable的   ServiceLocator:定义与之进行通...

wangangie32 117

Delegate.CreateDelegate 方法 创建指定类型的委托以表示指定的静态方法

下面的代码示例演示可以使用此 CreateDelegate 方法重载创建委托的两种方式。说明注意:    有两种 CreateDelegate 方法重载,它们指定 MethodInfo 但不指定第一个参数;其功能基本相同,不同之处在于一个允许您指定是否在绑定失败时引发异常,而另一个始终引发异常。此代码示例使用这两种重载。此示例声明一个 C 类和两个委托类型,前者包含一个静态方法 M2

ppkjjk1981的专栏 9145

ActionScript 委托传参

package { import flash.display.Sprite; import flash.display.MovieClip; import flash.events.MouseEvent; public class Main extends Sprite { public function Main() { var mc:MovieClip=new Mo

czh4869623的专栏 997

qt delegate createEditor()方法

QWidget * QItemDelegate::createEditor ( QWidget * parent, const QStyleOptionViewItem & option, const QModelIndex & index ) const [virtual] Returns the widget used to edit the item specified

证券指标的专栏 5814

SWF文件格式说明书--SWF文件头

 SWF文件头字段类型备注标识8位标识字节:F代表未压缩C代表已压缩(SWF6以后的版本特有)标识8位代表W标识8位代表S版本号8位代表SWF文件的版本,比如0x06代表SWF6文件长度32位整个文件的所占的字节

AOL's Web Log 1万+

我的计划 & SCM & Actionscript

随着Actionscript的发展,它已经步入面向对象开发的领域了, 回首再看flash4那时候的script,已经变成很遥远了. Macromedia提出了RIA的战略思想, 但我觉得这方面很不成熟.首先是语言本身, 就算是它完全符合了ECMA-4的标准,还是有很多东西是没有的;其次是我认为也是本质性的是开发群体,.很多actionscript developer不是专业出身, 很多是喜欢fla

AOL's Web Log 6027
上一篇: V2 Component “Mix-In” Map
下一篇: SWC 元数据标记(2003-9-19)
flashvan
博客等级 码龄22年 6粉丝 67原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值