Не так давно возникла проблема расширения класс 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 } } }
Буду рад если кому-нибудь пригодится!