在比较构造可选参数之前,我们先看看自定义事件和方法构造各自的过程。
自定义事件两步走,
第一步:
先继承Event类,并生成一个附加data;这个类我们可以定义为DataEvent。
//继承了Event类; public class DataEvent extends Event{ //构造一个属性,用于传递信息 private var eventData:*; private var eventData1:*; public function DataEvent(type:String, bubbles:Boolean=false,cancelable:Boolean=false, data:*=false,data1:* = true) { //沿用之前规则 super(type, bubbles, cancelable); //eventData则实例生成完毕 eventData = data; eventData1 = data1; } //另外再续给DataEvent类三个方法: //使其data属性为子类所公用 public function get data():*{ return eventData; } public function get data1():*{ return eventData1; } //重写克隆方法 override public function clone():Event{ return new DataEvent(type,bubbles,cancelable, eventData,eventData1); } //重写toString方法 override public function toString():String{ return formatToString("DataEvent", "type", "bubbles", "cancelable", "data"); }
为什么要重写这两个方法?因为原来的Event类中的这两个方法是没有针对data的,而这里我们添加了data属性,所以我们就相应地重写覆盖这两个方法。
第二步:
public class CustomEvent extends DataEvent { //想构造多少就构造多少,自己命名就可以了。 public static constSUBMIT_ENTRY:String = "submitEntryOnly"; public function CustomEvent(type:String,data:*=true, data1:* = true) { super(type, true, true, data, data1); } //依然重写一次; override public function clone():Event { return new CustomEvent(type,data,data1); } }
对于方法构造,相对来说就可以一行代码写清楚:
Function myFunciton(var1:类型,var2:类型)://返不返回随你便 {//随便写点什么};
写到这里,回到我们的主题:构造自定义event类的可选参数和构造方法中的可选参数问题。
在构造自定义event类时,我们注意:
public function DataEvent(type:String,bubbles:Boolean=false, cancelable:Boolean=false, data:*=false, data1:* = true)
我给定了data = false, data1 = true;这样做的结果是,他们有默认值。那换个说法,其实就是如果我不重新赋值,那么他们就会有默认值。
在构造方法时,
FunctionmyFunciton(var1:类型,var2:类型)://返不返回随你便 {//随便写点什么}; 我没有给出他们的default值,当然我也可以给他们值,如下: Function myFunciton(var1:类型= …,var2:类型=…)://返不返回随你便 {//随便写点什么};
其实如果你有自己跟着我的总结一起做的话,你应该会发现,actionscript的可选参数,实际上就是它已经有了默认值,你可以不一定再赋值,如果你再赋值,就会覆盖它的default值。如果没有默认值,那么你就必须给它值,否则actionscript就会报错提醒你少了参数。
另外还有一个小细节,这个也是actionscript的不足,即可选多个参数的省略问题。
在actionscript里面,加入有参数如下(var1,var2,var3,var4),
假设var1,var2是必要参数,那么我们就不谈了,
var3,var4是可选参数,那么我们可以省略这两者,也可以省略var4,但不能单独省略var3.
到目前为止,我在处理这个问题的时候,我会自定义时,根据参数的重要性的先后 来定义参数的位置。重要的放前,不重要的放后面。这样,我们就不会出现刚才所提到的尴尬了。但实际上这个并不算问题,我们就算把参数都写上也不会花多少时间。懒人才怕做细活。哈哈。