《 Essential ActionScript 2.0 》中文精华版 第 12 期
作者 佚名技术
来源 服务器技术
浏览
发布时间 2012-07-12
不是必需的),构造函数被放置在属性定义之后、方法定义之前。注意,构造函数声明不能包括返回值类型:
class Box { private var width:Number; private var height:Number; public function Box ( ) { // 初始化width和height width = 1; height = 1; } // 从此之后是典型的方法定义... }现在,我们每次创建一个新的Box实例,其宽度和高度都被初始化为1(否则,它们的默认值是undefined)。这虽然很便利,但是却过于僵化。为了允许为每个Box实例指定width和height属性,因此我们要为构造函数定义添加参数: public function Box (w:Number, h:Number) { // 使用传给参数w和h的值初始化width和height width = w; height = h; }在使用new操作符创建对象时,构造函数的参数值被传入,如下所示: new SomeClass(value1, value2,...valuen);其中SomeClass是被初始化的类名,value1, value2, ...valuen是传给构造函数的值。例如,我们使用初始值width为2和height为3来创建一个新的Box实例: new Box(2, 3);构造函数通常使用参数值来设置属性值,但是参数同样用来指定当一个实例被创建时应该发生什么。例如,对于Chat类的构造函数可以包含一个参数doConnect,该参数表明Chat实例是否应该自动连接刚刚创建的聊天服务器。 class Chat { public function Chat (server:String, port:Number, doConnect:Boolean) { if (doConnect) { connect(server, port); } } }4.5.1 Simulating Multiple Constructor Functions (模拟多构造函数) 不同于Java,对于一个单独的类,ActionScript不支持多构造函数(在Java中称为overloaded constructors)。在Java中,一个类根据不同的参数数目和类型来初始化实例。在ActionScript中,模拟该功能必需手动实现。例4-5,在我们Box类的基础上,展示了一种在ActionScript中模拟多构造函数的可能方式。 在例4-5中,Box构造函数将其工作委派给三个伪构造器方法,分别命名为boxNoArgs( )、boxString( )、boxNumberNumber( )。每个伪构造器的名字表明了参数的数目和数据类型(例如,boxNumberNumber( )定义了两个Number型的参数)。注意,这个例子中的伪构造器没有为它们的参数定义数据类型;在代码注释中会讨论这个异常。 例4-5 模拟重载构造函数 class Box { public var width:Number; public var height:Number; /** * Box构造器。将初始化委派给boxNoArgs( ), boxString( ), or boxNumberNumber( ). */ public function Box (a1:Object, a2:Object) { // 正如我们前面学到的,arguments可以存储传给该函数的参数值 // 如果无参数传入构造函数,则调用boxNoArgs( ) // 如果传入一个字符串参数,则调用boxString( ) // 如果传入两个数字参数,则调用boxNumberNumber( ) if (arguments.length == 0) { boxNoArgs( ); } else if (typeof a1 == "string") // 在以下代码中,我们通常需要将a1强制类型转换为 // boxString( )方法第一个参数所需的类型(即,String)。 // 然而,ActionScript 2.0类型转换操作符不能用于String和Number数据类型, // 很不幸,因此对于boxString( )和boxNumberNumber( )的参数 // 我们无法进行类型转换。 // 更多关于类型转换的细节请见第三章。 boxString(a1); } else if (typeof a1 == "number" && typeof a2 == "number") { // 没有强制类型转换为Number,见前面注释 boxNumberNumber(a1, a2); } else { // 显示方法使用不当的警告 trace("Unexpected number of arguments passed to Box constructor."); } } /** |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |
你可能对下面的文章感兴趣
上一篇: 水中浮动的文字下一篇: 让多个物体组合在一起 (大力神版)
关于《 Essential ActionScript 2.0 》中文精华版 第 12 期的所有评论