某些顶级类可以实例化,也可以作为函数调用(e.x. new Number() and Number()
,new Boolean() and Boolean()
,new Array() and Array()
)。
通常这用于类型转换或实例化的快捷方式。我希望能够做同样的事情:
public class Foo
{
public function Foo():void
{
//do something
}
}
public function Foo():Foo
{
//do some stuff;
return new Foo();
}
这可能吗?如果是这样,怎么样?
编辑澄清:
我最初想做的是创建一个与Flash / JavaScript交互的日志类,并且是跨浏览器兼容的。我希望能够使用log function 作为log 类中方法的别名。这让我想知道是否可以实现自定义转换功能只是因为。我现在意识到这是不可能的,但无论如何都很有趣。
答案 0 :(得分:1)
您可以定义类:
package [package name]
{
public class Foo
{
public function Foo():void
{
//do stuff
}
}
}
您可以定义功能:
package [package name]
{
public function Foo():Bar
{
return new Bar();
}
}
但是类和函数不能有命名冲突。否则你会收到脚本错误。
无法使用与该类相同的名称定义自定义强制转换函数,但可以使用其他名称实现:
package [package name]
{
public function CastFoo(foo:*):Foo
{
//do stuff
return Foo(foo);
}
}
答案 1 :(得分:0)
这是正确的:
public class Foo
{
public function Foo():void
{
//do something
}
}
这不是:
public function Foo():Foo
{
//do some stuff;
return new Foo();
}
如果您在Foo之前加上“new”:
new Foo();
你创建了一个Foo类的新实例。
如果你不这样做:
Foo();
你什么也得不到 - 实际上,你会得到一个关于缺少参数的编译器错误。
如果你传递一个参数:
var foo:Foo = Foo(bar);
你会把“bar”作为Foo的一个实例。要转换的对象必须共享要转换的超类。通常它用于将更通用的对象类型转换为更具体的对象类型 - 例如将event.target作为Sprite或将getChild返回的DisplayObject转换为MovieClip。