`
mysh
  • 浏览: 29440 次
  • 性别: Icon_minigender_1
  • 来自: 福州
社区版块
存档分类
最新评论

AS3 匿名类实现模拟(有类型)

阅读更多
Java 中的匿名类用起来十分灵活,它可以有效地减少类的个数,AS3尚未直接支持匿名类实现,不过它支持闭包,可以借助闭包来模拟Java中的匿名类实现:

要实现匿名类的接口
package zzx.test.flex
{
	public interface Interface
	{
		function i1():void;
		
		function i2(name:String):void;
		
		function i3(value:int):int;
		
		function i4():void;
		
	}
}


写一个实现这个接口的辅助类
package zzx.test.flex {

	public class InterfaceAnonymouse implements Interface {

		private var _i1:Function;
		private var _i2:Function;
		private var _i3:Function;
		private var _i4:Function;
		
		private function anyCall(func:Function, ...params):*{
			if(func == null) return null;
			return func.call(this, params);
		}

		public function i1():void {
			anyCall(_i1, arguments);
		}

		public function i2(name:String):void {
			anyCall(_i2, arguments);
		}

		public function i3(value:int):int {
			return anyCall(_i3, arguments);
		}

		public function i4():void {
			anyCall(_i4, arguments);
		}

		public function InterfaceAnonymouse(i1:Function, i2:Function, i3:Function, i4:Function) {
			this._i1=i1;
			this._i2=i2;
			this._i3=i3;
			this._i4=i4;
		}

	}
}


匿名类实现模拟
public function testInterface():void {
	
	var obj:Object = new Object();
	obj.name = "mysh";
	
	var inter:Interface=new InterfaceAnonymouse(function():void {
			Alert.show("i1");
		}, function(name:String):void {
			Alert.show("hello, "+name);
		}, function(value:int):int{
			return (value+100);
		}, null);
	
	inter.i1();
	inter.i2(obj.name);
	Alert.show(inter.i3(200).toString());
	inter.i4();
}


总结

优点
  • 代码风格与 Java 实现方式类似

缺点
  • 接口需要对应写一个辅助类
  • 闭包方法没有名字
  • 方法闭包缺少完整性约束,如闭包方法参数声明错误需要在运行时才能发现

要使用更灵活的方式,可以看看AS3 匿名类实现模拟(无类型)
如果哪位仁兄有更好的方法,欢迎拍砖   


0
0
分享到:
评论

相关推荐

    AS 快捷键.docx

    - **查看当前类成员**:`⌘F12` - 显示类内部成员,`⌘i`显示匿名类。 - **重写/实现方法**:`⌃o` - 选择可以重写或实现的方法。 5. **代码导航** - **查找使用**:`⌥F7` - 查找方法在哪被使用,类似Eclipse的...

    kotlin中反射遇到的问题_kotlin_

    可以使用`is`关键字进行类型检查,然后使用`as`或`as?`进行安全转换。 9. **扩展函数和扩展属性** 扩展函数和属性在Kotlin中不是类的一部分,因此无法通过反射直接访问。如果需要这些功能,可能需要额外的逻辑来...

    iphone——Swift中文教程完整版

    - **为自判断链接定义模型类**: 可以定义一个包含可选类型的类,然后在这个类中实现自判断链接。 - **通过自判断链接调用属性**: 使用自判断链接可以安全地访问可选类型的属性。 - **通过自判断链接调用方法**: 同样...

    python分段函数.pdf

    Python虽然没有内置的`switch`语句,但可以通过if-else语句或者第三方库如`func`来模拟实现。下面我们将详细讨论如何在Python中使用if-else、`switch`模拟以及numpy的`piecewise`函数来实现分段函数。 1. **使用if-...

    重新审视AS间IP欺骗让保护驱动源地址验证

    本文将探讨部署性问题的关键点,并提出了一种新的安全服务——跨自治系统(Autonomous System,AS)源地址保护(inter-AS Source Address Protection,iSAP)。技术上,iSAP通过提高一个自治系统内的源地址不成为...

    DISCS:跨AS欺骗防御的分布式协作系统

    这种攻击方式在分布式拒绝服务(DDoS)攻击中特别普遍,因为它可以提高攻击的匿名性并放大攻击强度,从而使得防御变得更加困难。DDoS攻击长期以来一直是互联网服务提供商(ISPs)面临的首要运营威胁之一。 传统的DDoS...

    Python 语言程序设计练习题.docx

    - **实例对象**:类的实例,每个实例都有自己的状态和行为。 - **类属性**:所有实例共享的属性。 - **实例属性**:属于某个特定实例的属性。 ### 12. 类方法、实例方法、静态方法 - **类方法**:通过@classmethod...

    c#学习方法

    - `IS`和`AS`关键字:掌握这两个关键字在类型判断和转换中的应用。 - 枚举类型以及适用场合:了解枚举类型的特点及其适用场景。 - 字符串理论:深入研究字符串内部实现机制。 5. **深入学习集合特性**: - 索引...

    Python使用Tkinter实现滚动抽奖器效果

    使用Tkinter的`Button`类创建按钮,并通过`command`参数传递一个函数(或匿名函数),以便在按钮被点击时执行相应的操作。同样,使用`place()`方法设置按钮的位置。 抽奖器的核心逻辑包括选择中奖者和模拟滚动效果...

    C# 管道通信

    管道通信大致可以分为两种类型:匿名管道和命名管道。其中,命名管道提供了更加强大的功能,如全双工通信、支持网络通信等特性。 #### 二、命名管道的特点与优势 命名管道相比于匿名管道具有更多的功能,主要特点...

    javascript使用闭包模拟对象的私有属性和方法

    由于JavaScript不支持像Java那样的`private`关键字来声明私有方法或属性,开发者通常利用闭包来模拟私有成员。在面向对象编程中,私有成员指的是仅限于对象内部使用的数据和功能,外部无法直接访问。 闭包的产生...

    最全的大数据术语合集 (2).pdf

    7. **人工智能(Artificial Intelligence)**: 人工智能是使计算机模拟人类智能,实现自我学习和适应能力的科学。 8. **行为分析法(Behavioural Analytics)**: 行为分析法关注用户的实际行为,以了解用户动机、习惯和...

    stealth.min.js

    3. **使用虚拟浏览器环境**:例如Headless Browser、BrowserMob Proxy等工具,它们提供了更高级别的匿名性。 4. **修改User-Agent字符串**:通过模拟不同设备的User-Agent字符串来规避检测。 5. **随机化JavaScript...

    TMAC修改Mac地址

    TMAC使得用户能够在不改变硬件的情况下,自定义电脑、WiFi网卡以及宽带适配器的MAC地址,从而实现某些特定的功能或解决应用限制。 1. **为什么要修改MAC地址**: - **避免限制**:有些网络服务提供商可能会根据MAC...

    swf安装文档

    此外,系统对数据库的初始化也有特定要求,例如TB_TOWNBASICINFO表必须包含一条区记录,USERTABLE中需有一条区管理员记录等。 在发布系统时,考虑到asp.net进程需要调用Office,因此需要配置相应的权限。发布目录需...

    Python面试题汇总及答案详解

    3. **模块与包**:导入模块(import、from...import、import...as...)、创建模块和包、sys模块、os模块、math模块等。 4. **面向对象编程**:类的定义、对象的创建与实例化、封装(访问修饰符public、private、...

    Asp.net读取Word的实例与总结

    - 如果应用程序正在通过`<identity impersonate="true"/>`进行模拟,则需要确保匿名用户(通常是IUSR_MACHINENAME)具有相应的权限。 #### 五、结论 通过上述步骤,我们成功地实现了在ASP.NET中使用C#语言操作...

Global site tag (gtag.js) - Google Analytics