Не так давно возникла проблема расширения класс Array для включения ряда своих дополнений. Я написал расширения. И решил поделиться с Вами. Есть несколько нюансов, например наследование будет не от Array, а от Proxy (он специально создан для итого чтобы расширять Array пользователем):
Так же необходимо обратить внимание как его использовать, при необходимости можно переопределить все методы и свойства Array в ArrayFoundation:
Буду рад если кому-нибудь пригодится!
// Foundation.as
package mixailflash.Foundation
{
import flash.utils.Proxy;
import flash.utils.flash_proxy; //без этого вообще работать не будет
use namespace flash_proxy;
dynamic public class ArrayFoundation extends Proxy
{
private var _array:Array;
public function ArrayFoundation(...parameters)
{
_array = parameters;
}
public function remove(value:*):void
{
for (var i:int = _array.length-1; i >=0; i --)
{
if (_array[i] == value) _array.splice(i, 1);
}
}
public function isKey(value:*):Boolean
{
if (_array[value]) return true;
return false;
}
public function get lenght():int
{
return _array.length;
}
override flash_proxy function callProperty( name:*, ...rest):*
{
return _array[name].apply(_array, rest);
}
override flash_proxy function getProperty(name:*):*
{
return _array[name];
}
override flash_proxy function setProperty(name:*, value:*):void
{
_array[name] = value;
}
}
}
Так же необходимо обратить внимание как его использовать, при необходимости можно переопределить все методы и свойства Array в ArrayFoundation:
// Core.as
package
{
import mixailflash.Foundation.*;
import avmplus.USE_ITRAITS; // без этого работать не будет
import flash.display.Sprite;
public class Core extends Sprite
{
public function Core()
{
var test:ArrayFoundation = new ArrayFoundation();
test.push(1);
test.push(1);
test.push(1);
test.push(2);
trace (test.isKey(1)); // true; 1- это номер элемента
trace(test); // 1, 1, 1, 2
test.remove(1); // удаляем элементы равные 1;
trace (test.isKey(1)); // false;
trace(test); //2
}
}
}
Буду рад если кому-нибудь пригодится!