在Actionscript 3中扩展数组(Flex)

前端之家收集整理的这篇文章主要介绍了在Actionscript 3中扩展数组(Flex)前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在尝试为Array做出一个非常特殊的变化.当我有以下内容时:
  1. public class TileArray extends Array {
  2. // Intentionally empty - I get the error regardless
  3. }

为什么我不能这样做?

  1. var tl:TileArray = [1,2,3];

尽管我可以做到这一点

  1. var ar:Array = [1,3];

我收到的错误是这样的:

使用静态类型Array将值隐式强制转换为可能不相关的类型

解决方法

您可以编写自己的类来公开Array的所有方法,而不是扩展Array.通过使用Proxy类,您可以将所有默认Array方法重定向到内部数组,但仍可以灵活地添加自己的方法
  1. package
  2. {
  3. import flash.utils.flash_proxy;
  4. import flash.utils.Proxy;
  5.  
  6. use namespace flash_proxy;
  7.  
  8. dynamic public class ExampleArray extends Proxy
  9. {
  10. private var _array:Array;
  11.  
  12. public function ExampleArray(...parameters)
  13. {
  14. _array = parameters;
  15. }
  16.  
  17. override flash_proxy function callProperty( name:*,...rest):*
  18. {
  19. return _array[name].apply(_array,rest);
  20.  
  21. }
  22.  
  23. override flash_proxy function getProperty(name:*):*
  24. {
  25. return _array[name];
  26. }
  27.  
  28. override flash_proxy function setProperty(name:*,value:*):void
  29. {
  30. _array[name] = value;
  31. }
  32.  
  33. public function getSmallestElement():*
  34. {
  35. var helper:Array = _array.concat().sort();
  36. return helper[0];
  37. }
  38.  
  39. }
  40. }

例:

  1. var test:ExampleArray = new ExampleArray(8,7,6,5,4,3,1);
  2. trace( test.getSmallestElement()); // 1
  3. test.sort();
  4. trace(test); // 1,8

猜你在找的Flex相关文章