Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/actionscript-3/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays AS-3-如何覆盖数组/实现括号语法;[]?_Arrays_Actionscript 3_Flash_Extend - Fatal编程技术网

Arrays AS-3-如何覆盖数组/实现括号语法;[]?

Arrays AS-3-如何覆盖数组/实现括号语法;[]?,arrays,actionscript-3,flash,extend,Arrays,Actionscript 3,Flash,Extend,我正在尝试扩展类数组。我希望在将对象添加到数组中时得到某种通知,然后执行一些额外的检查/操作 最有趣的部分是: array[2]=对象 array.hello=“world” 这正是我被困的地方: public dynamic class Array2 extends Array { } var array: Array2 = new Array2(); array[2] = "hello world"; // need to do some verification before add

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

最有趣的部分是:

  • array[2]=对象
  • 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 ?

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

public class Test {

        private var arr:Array = [];

        public function Test() {
        }

        public function add(o:*):void {
            arr.push(o);
            //dispatch event
        }
    }
}
编辑(在看到您的后):
在这种情况下,基本上需要声明类动态。我不太确定在这种情况下如何检查添加的属性是否没有计时器/enterframe。

我认为您需要的是一个类。我正准备在这里编写一小段代码,但后来看到doc页面已经有了一些很好的示例来展示其用法。

您可以创建扩展的类

这是一个样本

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

您的测试类将是某种后备计划。