在ActionScript上有可能有可调用的对象吗?例如:
class Foo extends EventDispatcher
{
Foo() { super(); }
call(world:String):String
{
return "Hello, " + world;
}
}后来..。
var foo:Foo = new Foo();
trace( foo("World!") ); // Will NOT work发布于 2010-05-01 08:21:07
正如其他人所说,你不能有可调用的对象。但是,如果出于某种原因您想要有状态函数,您可以通过静态类变量和包级函数来实现。例如:
// com/example/foo/Helper.as
package com.example.foo {
public class Helper {
private static var _instance:Foo;
public static var data:String;
public static function get instance():Helper
{
if(!_instance) { _instance = new Helper(); }
return _instance;
}
}
}
// com/example/foo/hello.as
package com.example.foo {
public function hello(world:String):void
{
if(Helper.instance.data)
{
trace("Bye, " + Helper.instance.data);
}
trace("Hello, " + world);
Helper.instance.data = world;
}
}使用时,它将打印不同的内容。
hello("World!"); // traces "Hello, World!"
hello("People"); // traces "Bye, World!" and "Hello, People"发布于 2010-04-29 01:40:12
注意:构造函数和方法声明都遗漏了要编译的关键字public function,但我认为这不是原始代码。:)
答案是:你不能。
我的问题是:你想完成什么?
Function是唯一可调用的值。和Functions是ActionScript中的原语,就像ints或Booleans一样,所以没有什么有意义的方法来扩展它们。
如果你想让它成为一个对象,就用Java语言的方式,定义一个ICallable接口,然后实际调用一个方法,或者仅仅是使用一个函数。闭包提供了创建有状态函数的最简单、最灵活的可能性,如果这是您想要的话。
edit:好吧,你可以这样做(举个例子):
private var fooInst:Foo = new Foo();
protected var foo:Function = fooInst.call;然后根据您的需要执行以下workst:
<mx:Label text="{foo('Whatever')}"/>它甚至可能更灵活一些,尽管你失去了严格类型的好处。
问候
back2dos
发布于 2010-04-29 01:43:15
为什么需要这样做?(我不是在批评,只是感兴趣!)AS3中的函数本身就是一等公民,可以作为参数传递。
例如:
public function main(foo:Function):void
{
trace(foo("World!")); // Will work, assuming foo = function(str:String):String {...}
}https://stackoverflow.com/questions/2731709
复制相似问题