About

<#TEMPLATE_INCLUDE_NINEPAGE_ABOUTME#>
  • Jan

    2

    在 AS2 时代,有一个全局变量的概念,全局变量不能使用 var 来定义,而是直接使用关键字“_global.变量名”的方式来读写变量。然而到了 AS3 时代,这个全局变量的关键字已经不存在了,所以用户需要利用一定的技巧来摸拟全局变量,比如技巧一:通过在匿名包中定义一个全局类加一个静态变量,这样就可以被其它所有类和对象在任何时候访问到。

    然后事实上,在 AS3 中虽然没有了 _global 这个关键字,但全局对象仍然存在,只是在一般状况下没有任何关键字或对象可以引用它。在嵌套函数中的 this 关键字它并不会指向当前类的实例,而是会指向这个全局对象 [object global],如果开发者不了解这一点,往往可能就会造成侦听器未移除,甚至是内存泄漏(所以当嵌套函数中需要引用当前类的实例时,需要在类的方法中定义一个变量引用当前类的实例)。

    但也正是由于嵌套函数中的 this 永远都是指向全局对象 [object global] 的,所以可以利用这一点,让 _global 在 AS3 中重现。技巧二:在匿名包中定义一个全局的 getter 方法如下:

    package{
     public function get _global():Object{
      return global();
      function global():Object{
       return this;
      }
     }
    }

    好了,现在可以像在 AS2 中一样在当前项目中直接使用 _global 了。

    More...