1

我正在尝试扩展课程Array。当对象被添加到我的数组中时,我希望得到某种通知,然后进行一些额外的检查/操作。

最有趣的部分是这样的:

  • array[2] = object;
  • array.hello = "world";

这就是我坚持的地方:

public dynamic class Array2 extends Array
{
}

var array: Array2 = new Array2();
array[2] = "hello world"; // need to do some verification before adding


这就是我想要使用 的所谓括号语法。如果我可以使用该语法,我可以在内部使用一个数组来向其中添加有效对象。更多的是关于使用数组的感觉,所以我可以用我的类的对象替换使用过的数组。

var obj: MyClass = new MyClass();
obj[2] = "test";


分配新对象时的事件也会对我有所帮助。

var arr: Array = [];
arr[2] = "test"; // fire event with index and object ?
4

3 回答 3

1

我认为你需要的是一个代理类。我正要在这里写一小段代码,但后来看到文档页面已经有一些很好的例子来展示用法。

于 2013-10-03T20:39:22.807 回答
1

您可以创建扩展flash.utils.Proxy的类

这是一个示例

import flash.utils.Proxy;
import flash.utils.flash_proxy;

public dynamic class MyArray extends Proxy {

    private var acturalArray:Array;

    public function MyArray() {
        super();

        acturalArray = [];            
    }

    override flash_proxy function setProperty(name:*, value:*):void {

        //do some verification before set value,
        if (acturalArray[name] != undefined) {
            return;
        }

        acturalArray[name] = value;
    }

    override flash_proxy function getProperty(name:*):* {
        return acturalArray[name];
    }
}

这是如何使用它

var p:MyArray = new MyArray();
p[1] = 5;
p[1] = 2;

var d:int = p[1];//d will be equal to 5
于 2013-10-04T13:16:06.543 回答
0

为什么需要对它进行子类化?是否绝对有必要使用 [] 语法或使其成为动态类?您可以轻松地执行以下操作:

public class Test {

        private var arr:Array = [];

        public function Test() {
        }

        public function add(o:*):void {
            arr.push(o);
            //dispatch event
        }
    }
}

编辑(在看到你的之后):好吧,在那种情况下,你基本上需要声明你的类是动态的。我不太确定在这种情况下如何检查是否在没有某些计时器/输入框的情况下添加了属性。

于 2013-10-03T18:45:16.367 回答