【问题标题】:ArrayCollection extend errorArrayCollection 扩展错误
【发布时间】:2011-08-27 22:55:40
【问题描述】:

我扩展了 ArrayCollection 类以添加推送方法

package com.cargo.collections
{
    import mx.collections.ArrayCollection;

    public class DataCollection extends ArrayCollection {

        public function DataCollection(source:Array = null) {
            super(source);
        }

        public function push(...parameters):uint {
            var i:uint = source.push(parameters);
            this.refresh();
            return i;
        }
    }
}

但推送的数据是数组:/

var test:DataCollection = new DataCollection({id: 1});
test.source.push({id: 2});
test.push({id: 3});

输出是

test = Array( {id: 1}, {id: 2}, Array({id: 3}) )

【问题讨论】:

  • 为什么这个输出错误?你到底期待什么?

标签: arrays apache-flex actionscript-3 oop


【解决方案1】:

在您的示例中,...parameters 创建了一个数组,其中包含传递给该函数的所有参数。这应该可以按预期工作:

public function push(...parameters):uint {
    var i:uint = source.push(parameters[0]);
    this.refresh();
    return i;
}

或者,如果您的目的是启用多个参数的推送,您可以使用 Function.apply() 方法,它将给定数组转换为多个参数:

public function push(...parameters):uint {
    var i:uint = source.push.apply(null,parameters);
    this.refresh();
    return i;
}

这相当于说

var i:uint = source.push(parameters[0],parameters[1],parameters[2]);  // etc

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-15
    • 2011-09-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多