如何将... rest参数数组作为flash actionscript 3中的对象属性传递给另一个函数?

时间:2009-11-17 06:34:35

标签: flash actionscript-3

我有一个使用... rest参数的函数如下:

public function dispatchActions(... actions):void
    {
        var params:Object = new Object();       
        params.actions = actions; // I also tried casting ie. = (actions as Array)

        this.target.dispatchEvent(new ActionEvent(ActionEvent.dispatchActions, params));
    }

我使用myActionObject.dispatchActions("all");

来调用它

问题是,当侦听器收到调度的params对象并尝试访问actions数组时,它什么都不做。如果我尝试跟踪evt.params.actions它跟踪空白,如果我尝试跟踪evt.params.actions[0],则跟踪未定义。

例如:

    function actionsListener(evt:ActionEvent):void
    {
        var actions:Array = (evt.params.actions) as Array; // I also tried without casting

        trace("actions", actions, "actions 0", actions[0], "action 1", actions[1]);
    }

这是输出:actions actions 0 undefined actions 1 undefined

这里有什么问题?我不明白为什么我不能通过一个对象作为事件参数传递... rest参数。我怎样才能做到这一点?

谢谢。

3 个答案:

答案 0 :(得分:1)

这对我有用:

sample("as", "asd");
private function sample(... actions):void
{
    var o:Object = {};
    o.array = actions;
    sample1(o);
}
private function sample1(o:Object):void
{
    trace(o.array[1]);//traces asd
}

答案 1 :(得分:1)

或者你可以这样做:

sample("as", "asd");
private function sample(... actions):void
{
    sample1(actions);
}
private function sample1(o:Array):void
{
    trace(o[1]);//traces asd
}

答案 2 :(得分:1)

看起来你的params对象没有正确发送事件......我认为ActionEvent是你自己的自定义事件 - 你检查过:

1)您正在将params对象正确传递给事件构造函数吗?

例如:

class ActionEvent extends Event{
    public var params:Object;
    public function ActionEvent(type:String, params:Object){
        super(type);
        this.params = params;
    }
}

2)如果您正在重新调度事件,是否定义了clone函数以确保您的params也被克隆?

 override public function clone():Event{
    return new ActionEvent(type,params);
}