RKC*_*KCY 5 actionscript flex3 actionscript-3
Action脚本是基于面向对象编程开发的,但为什么它不支持函数重载?
Flex支持重载吗?
如果是,请简要说明一个真实的例子.
Luc*_*hez 22
如您所说,Action Script不支持函数重载(因此在Flex中也不支持).
但是函数可能有默认参数,如下所示:
public function DoSomething(a:String='', b:SomeObject=null, c:Number=0):void
Run Code Online (Sandbox Code Playgroud)
DoSomething
可以通过4种不同方式调用:
DoSomething()
DoSomething('aString')
DoSomething('aString', anObject)
DoSomething('aString', anObject, 123)
Run Code Online (Sandbox Code Playgroud)
这种行为可能是因为Action Script遵循ECMA Script标准.函数确实是对象的一个属性,因此,就像您不能拥有两个具有相同名称的属性一样,您不能拥有两个具有相同名称的函数.(这只是一个假设)
以下是第13节(PDF文件的第83页)中的标准ECMA-262(ECMAScript语言规范),当您声明类似的函数时
function Identifier(arg0, arg1) {
// body
}
Run Code Online (Sandbox Code Playgroud)
创建当前变量对象的属性,其名称Identifier
和值等于如下所示创建的Function对象:
new Function(arg0, arg1, body)
Run Code Online (Sandbox Code Playgroud)
所以,这就是为什么你不能重载一个函数,因为你不能拥有当前变量对象的多个属性同名
值得注意的是,函数重载不是OOP习语,它是一种语言约定.OOP语言通常具有重载支持,但这不是必需的.
正如lk所说,你可以用它显示的结构来近似它.或者,你可以这样做:
public function overloaded(mandatory1: Type, mandatory2: Type, ...rest): *;
Run Code Online (Sandbox Code Playgroud)
此函数将需要前两个参数,然后将其余参数作为数组传递,然后您可以根据需要处理它.这可能是更灵活的方法.
归档时间: |
|
查看次数: |
8018 次 |
最近记录: |