为什么使用localscope的变量能够访问该函数,但在此示例中不能使用全局范围

时间:2011-12-06 14:01:41

标签: flash actionscript actionscript-2

我想理解为什么我无法从具有全局范围的变量globalThis访问函数,而localsthis具有本地范围。

class MyClass extends MovieClip 
{

  var globalThis:MovieClip ; 

function MyClass() 
{

   var localThis = this ;

   globalThis = this ; 

   submit_Btn.onPress = function()
   {

     localThis.process(); // THIS WORKS GOOD ! 

         globalThis.process() ; // WHY THIS DOESNOT WORK ??????

       }



}

    function process()
    {
         trace( "Welcome to the function named process()") ;
    }
}

3 个答案:

答案 0 :(得分:0)

如果您致电localThis.globalThis.process(),那么它应该有用。

答案 1 :(得分:0)

原因是当您创建内联函数时,您正在创建一个闭包,或activation object。此激活对象的范围仅限于创建它的函数体(而创建函数本身位于Class实例的激活对象中,并且可以看到所有内容)。

答案 2 :(得分:0)

简单。你声明了

var globalThis:MovieClip;

请注意,您为MovieClip

指定了globalThis类型

另一方面,您将localThis声明为所谓的变体类型。

这意味着它是一个松散类型的变量,而globalThis是一个强类型变量。编译器不会检查process方法是否是松散类型实例的成员,而是globalThis

现在您会看到globalThis实际上是MovieClip,但没有process的定义。请注意,您在MyClass课程中对此进行了定义。将var globalThis:MovieClip;更改为var globalThis:MyClass;并且它会起作用,因为编译器会在process()

中看到MyClass的定义

或者,您可以将process方法称为MyClass(globalThis).process();。这种 globalThis强制转换为MyClass类型,因此编译器认为它没有任何问题。

现在你看,这根本不是范围问题!!