我有一个由对象文字定义的简单对象,并且为此对象分配了几个函数。在函数内部,我尝试访问全局变量,它只是未定义。 Flex调试器告诉我变量就在范围树的正上方。
是的,我知道我可以使用'this'来访问Thing,但这并不能解决我的范围问题。
Project Flex编译器设置:Flex SDK 3.4,需要Flash Player 10.x。
示例:
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" creationComplete="Thing.bling();">
<mx:Script>
<![CDATA[
var Thing:Object = {
doStuff: function():void {
trace(blah); //blah is undefined
},
bling: function():void {
Thing.doStuff(); //Thing is undefined
},
};
]]>
</mx:Script>
<mx:Panel id="blah">
</mx:Panel>
</mx:Application>
答案 0 :(得分:1)
我不确定你的麻烦是什么,但我将你的确切代码剪切并粘贴到一个新的Flex项目中,尽管语法错误很简单(Thing声明中有额外的尾随逗号),但它跟踪了我的期望:
Test0.blah
(假设我的项目名称是Test,而面板blah是第一个对象)。
我使用Flex 3.3然后在Flash Player 10,0,22,87
上尝试了Flex 3 修改强>
如果我按照评论中的说明改变项目属性,我现在可以重现:
Flex Builder - &gt;属性 - &gt; Flex编译器 - &gt;需要Flash Player版本 - &gt; 10.0.0
使用此设置,行为不会出现在Flex 3.0中,但 出现在3.2,3.3和3.4中。
我建议这是一个错误,你应该找到解决它的方法。
答案 1 :(得分:0)
试
var Thing:Object;
Thing = {
doStuff: function():void {
trace(blah); //blah is undefined
},
bling: function():void {
Thing.doStuff(); //Thing is undefined
},
};
只是一个猜测...但我遇到了很多问题,这是必要的...太醉了,累了试试这是否能解决问题......但是对你来说,它应该只是一个开始傍晚/晚上......:D
格尔茨
back2dos