动作脚本的排队系统

时间:2012-06-08 10:13:32

标签: serialization actionscript queue eval

是否有提供排队系统的动作脚本库? 这个系统必须允许我传递对象,我要调用它的函数和参数,如:

Queue.push(Object, function_to_invoke, array_of_arguments)

或者,是否可以(反)序列化函数调用?我如何用给定的参数评估'function_to_invoke'?

提前感谢您的帮助。

2 个答案:

答案 0 :(得分:2)

ActionScript 3.0中没有特定的队列或堆栈类型数据结构,但您可以找到一个库(也许是CasaLib),它提供了这些内容。

以下代码段应该适合您,但您应该知道,因为它通过字符串引用函数名称,所以如果引用不正确,您将不会得到任何有用的编译器错误。

该示例使用rest parameter,它允许您指定任意长度的数组作为方法的参数。

function test(... args):void 
{
    trace(args);
}

var queue:Array = [];
queue.push({target: this, func: "test", args: [1, 2, "hello world"] });
queue.push({target: this, func: "test", args: ["apple", "pear", "hello world"] });

for (var i:int = 0; i < queue.length; i ++) 
{
    var queued:Object = queue[i];
    queued.target[queued.func].apply(null, queued.args);
}

答案 1 :(得分:1)

当然,这与JavaScript类似

const name:String = 'addChild'
    , container:Sprite = new Sprite()
    , method:Function = container.hasOwnProperty(name) ? container[name] : null
    , child:Sprite = new Sprite();
if (method)
  method.apply(this, [child]);

所以查询方法可能如下所示:

function queryFor(name:String, scope:*, args:Array = null):void
{
    const method:Function = scope && name && scope.hasOwnProperty(name) ? scope[name] : null
    if (method)
        method.apply(this, args);
}