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
您的测试类将是某种后备计划。