fas的静态代码块

简而言之:无论在何时调用一个类时,静态初始化程序总是会优先执行。无论你想对这个类进行什么操作(调用构造函数或是访问一个字段),它总是优先执行。而且他仅仅执行一次。
很久以前,我就发表过使用过静态初始化程序的代码。那些代码效果还不错,但是最新的Flex SDK编译器 不是太喜欢他们。说实话我也不是太喜欢它,因为过去我使用的结构比较臭,而且会出现一些错误。
一个 简单的静态初始化程序如下:

  1. //static (this comment isn't required, but I recommend using one)
  2. {
  3.     trace('woo! static!');
  4. }
复制代码

然而,声明变量或者是使用循环是没有用的。以前循环语句是有用的,但是无论如何用适当的方法器操纵它比较好。你所需要的只是一个能够被直接引用的匿名函数:

  1. //static
  2. {
  3.     (function():void {
  4.         var i:int;
  5.         for (i = 0; i < 3; i++){
  6.             trace(foo + i);
  7.         }
  8.     }());
  9. }
复制代码

一个完整的例子
    就像JS一样,as3有作用范围的。这就意味着在你所定义的函数中的变量只能在函数中使用。所以我们可以使用一些暂时的对象/变量,在完成初始化后它们就会被抛弃。
     它们不会占用内存,也不会扰乱类的命名空间的。
A Complete Example
HelloStatic.as

  1. package {
  2.     import flash.display.*;
  3.     public class HelloStatic extends Sprite {
  4.         //static
  5.         {
  6.             trace('hello');
  7.         }
  8.         public function HelloStatic():void {
  9.             trace('world');
  10.             trace(OtherClass.field);
  11.         }
  12.     }
  13. }
复制代码

OtherClasss.as

  1. package {
  2.     public class OtherClass{
  3.         public static var field:String ='not initialized yet';
  4.         //static
  5.         {
  6.             field = 'initialized';
  7.         }
  8.     }
  9. }
复制代码

输出:

  1. hello
  2. world
  3. initialized
复制代码

一些与JS有关的事
在JS中可以用三种方法能八九不离十地写上面的匿名函数(幸运的是AS3中只能用一种方法来写)。调用括号可以放在花括号的外边。并且花括号可以省略。然而,我这里所用的调用时十分有意义的(这也是JSLint推荐的方式)。
原因很简单。有2个独立的部分。第一个是函数,还有它的调用部分。

  1. function() {
  2.     [...]
  3. }();
复制代码

第二个含有类似标签的括号。

  1. (function() {
  2.     [...]
  3. }());
复制代码

在任何时候直接调用一个函数都应该被包在括号当中,这样就声明了函数从这里执行。根据错误的假设开始读一个函数的代码是十分使人不爽的。如果你平时注意使用括号的话就可以完全避免这样的错误了。庆幸的是as3会逼迫你去这么做。

你可能感兴趣的:(Flex,Flash)