我想理解为什么我无法从具有全局范围的变量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()") ;
}
}
答案 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
类型,因此编译器认为它没有任何问题。
现在你看,这根本不是范围问题!!