我曾经有一个疑惑。
test.fla代码如下:
// 调用两次methodName方法,一次是不传参数,一次是传参数
methodName();
methodName("helloWorld!");
function methodName() {
trace("Just a test!");
}
outPut:
"Just a test!"
"Just a test!"
methodName();
methodName("helloWorld!");
function methodName() {
trace("Just a test!");
}
outPut:
"Just a test!"
"Just a test!"
methodName();
methodName("helloWorld!");
function methodName() {
trace("Just a test!");
}
outPut:
"Just a test!"
"Just a test!"
发现居然都是对的,都可以执行。
在JAVA里头声明一个方法的时候,参数都是固定了的。
调用JAVA里头的方法的时候传递的参数的个数和类型都一定要正确。
可是AS2里头却不这样。
在网上找了找终于知道原因了。
原来AS2采用的宽松式参数定义,就是说无论你输入多少个参数,都可以接受。
比如说一个方法的声明是这样的
function test(s) {}
这并不代表你只能输入一个参数,实际上你可以输入任意个任意类型的参数。
你输入的参数都会存储在一个arguments数组里头。这个是AS内部自动实现的。
至于它是怎么实现的,我也不清楚。
但是对于
function test(s:String) {
// your code
}
如果你这样调用test(100, 200);是会报错的。原因很简单,如果你指定了参数类型。
那么就一定要输入该类型的参数了。你可以这样调用test("100", 200, 300, ...)。
那么好了,现在我们知道了对于AS2来说,一个方法是可以传递任意个参数的。
通过这个特点,我们可以实现多构造器。大家都知道JAVA里头是允许存在多个构造器的。
而AS是不允许的。
通过AS2的变参特点,我们是可以作到实现多构造器的。
ClassName.as 代码如下:
class ClassName{
// 构造器
function ClassName() {
if(arguments.length == 0) {
trace("空参数");
} else if(arguments.length == 1) {
trace("非空参数 :: " + arguments[0])
}
}
}
className.fla 代码如下:
var a:ClassName = new ClassName();
var b:ClassName = new ClassName("HelloWorld!");
className.fla 代码如下:
var a:ClassName = new ClassName();
var b:ClassName = new ClassName("HelloWorld!");outPut:
"空参数"
"非空参数 :: HelloWorld!"
现在我们实现了多构造器了!
建议参考:
http://blog.liu21st.com/index.php?job=art&articleid=a_20041217_215405