Почему переменная с помощью localscope может получить доступ к функции, но не с глобальной областью действия в этом примере - PullRequest
0 голосов
/ 06 декабря 2011

Я хочу понять, почему я не могу получить доступ к функции из переменной global, имеющей глобальную область по сравнению с local, имеющей локальную область.

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 голосов
/ 07 декабря 2011

Причина в том, что при создании встроенной функции вы создаете замыкание или объект активации .Этот объект активации имеет область действия, ограниченную телом функции, которое его создало (тогда как сама функция создания находится в объекте активации экземпляра Class и может видеть все).

0 голосов
/ 07 декабря 2011

Simple.Вы объявили

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, так что компилятор не видит в этом ничего плохого.

Теперь вы видите, что это вообще не было вопросом области видимости !!

0 голосов
/ 06 декабря 2011

Должно работать, если вы позвоните localThis.globalThis.process().

...