首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >ActionScript上的可调用对象?

ActionScript上的可调用对象?
EN

Stack Overflow用户
提问于 2010-04-29 01:21:51
回答 5查看 275关注 0票数 0

在ActionScript上有可能有可调用的对象吗?例如:

代码语言:javascript
运行
复制
class Foo extends EventDispatcher
{
  Foo() { super(); }

  call(world:String):String
  {
    return "Hello, " + world;
  }
}

后来..。

代码语言:javascript
运行
复制
var foo:Foo = new Foo();
trace( foo("World!") );    // Will NOT work
EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2010-05-01 08:21:07

正如其他人所说,你不能有可调用的对象。但是,如果出于某种原因您想要有状态函数,您可以通过静态类变量和包级函数来实现。例如:

代码语言:javascript
运行
复制
// 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;
    }
}

使用时,它将打印不同的内容。

代码语言:javascript
运行
复制
hello("World!");   // traces "Hello, World!"
hello("People");   // traces "Bye, World!" and "Hello, People"
票数 0
EN

Stack Overflow用户

发布于 2010-04-29 01:40:12

注意:构造函数和方法声明都遗漏了要编译的关键字public function,但我认为这不是原始代码。:)

答案是:你不能。

我的问题是:你想完成什么?

Function是唯一可调用的值。和Functions是ActionScript中的原语,就像ints或Booleans一样,所以没有什么有意义的方法来扩展它们。

如果你想让它成为一个对象,就用Java语言的方式,定义一个ICallable接口,然后实际调用一个方法,或者仅仅是使用一个函数。闭包提供了创建有状态函数的最简单、最灵活的可能性,如果这是您想要的话。

edit:好吧,你可以这样做(举个例子):

代码语言:javascript
运行
复制
private var fooInst:Foo = new Foo();
protected var foo:Function = fooInst.call;

然后根据您的需要执行以下workst:

代码语言:javascript
运行
复制
<mx:Label text="{foo('Whatever')}"/>

它甚至可能更灵活一些,尽管你失去了严格类型的好处。

问候

back2dos

票数 0
EN

Stack Overflow用户

发布于 2010-04-29 01:43:15

为什么需要这样做?(我不是在批评,只是感兴趣!)AS3中的函数本身就是一等公民,可以作为参数传递。

例如:

代码语言:javascript
运行
复制
public function main(foo:Function):void
{
    trace(foo("World!")); // Will work, assuming foo = function(str:String):String {...}
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2731709

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档