Actionscript 3 在函数中传递一个变量,然后在ActionScript 3中更改原始变量
我试图创建一个可重用函数,它可以将全局变量作为参数,然后更改该变量,以便其他函数可以使用它。然而,我的理解是,为函数创建的参数的作用域仅限于该函数,因此我无法更改全局变量 函数需要能够将不同的变量作为参数(参见第9行和第14行)。我如何才能让它改变第1行的myVar,以便其他函数可以读取它 谢谢你的意见Actionscript 3 在函数中传递一个变量,然后在ActionScript 3中更改原始变量,actionscript-3,variables,parameters,Actionscript 3,Variables,Parameters,我试图创建一个可重用函数,它可以将全局变量作为参数,然后更改该变量,以便其他函数可以使用它。然而,我的理解是,为函数创建的参数的作用域仅限于该函数,因此我无法更改全局变量 函数需要能够将不同的变量作为参数(参见第9行和第14行)。我如何才能让它改变第1行的myVar,以便其他函数可以读取它 谢谢你的意见 1. var myVar1:Boolean; 2. var myVar2:Boolean; 3. 4. myMc1.addEventListener(MouseEvent.CLICK
1. var myVar1:Boolean;
2. var myVar2:Boolean;
3.
4. myMc1.addEventListener(MouseEvent.CLICK, onMC1Clicked);
5. myMc2.addEventListener(MouseEvent.CLICK, onMC2Clicked);
6.
7. function onMC1Clicked(evt:MouseEvent):void
8. {
9. toggleState(myMc1, myVar1, myFunction);
10. }
11.
12. function onMC2Clicked(evt:MouseEvent):void
13. {
14. toggleState(myMc2, myVar2, myFunction);
15. }
16.
17. function toggleState(mc:MovieClip, _switch:Boolean, funct:Function):void
18. {
19. switch (_switch)
20. {
21. case false:
22. _switch = true;
23. mc.gfx1.visible = true;
24. mc.gfx2.visible = false;
25. break;
26.
27. case true:
28. _switch = false;
29. mc.gfx1.visible = false;
30. mc.gfx2.visible = true;
31. break;
32. }
33. funct();
34. }
35.
36. fuction myFunction():void
37. {
38. trace('fired');
39. }
正如我在评论中所说,
在AS3中,属于基本数据类型(包括Boolean、Number、int、uint和String)的对象的行为就像是通过值传递的,而不是通过引用传递的。您需要将基本体包装成非基本体类型,例如对象,然后通过引用传递 因此,而不是
切换状态(myMc1、myVar1、myFunction)代码>
您将执行切换状态(myMc1,{bool:myVar1},myFunction)代码>
您的函数如下所示:
function toggleState(mc:MovieClip, myBoolObject:Object, funct:Function):void
{
var _switch:Boolean = myBoolObject.bool;
switch (_switch)
{
//etc...
}
}
但是
由于您的MC两者的行为方式相同,因此我建议使用此方法整合一些代码:
//MovieClips are dynamic classes, meaning you can dynamically add properties to them
myMc1._toggled = false;
myMc2._toggled = false;
//You can share the same event handler for both buttons
myMc1.addEventListener(MouseEvent.CLICK, onMCClicked);
myMc2.addEventListener(MouseEvent.CLICK, onMCClicked);
function onMC1Clicked(evt:MouseEvent):void
{
//Get the clicked button
var mc:MovieClip = evt.currentTarget as MovieClip;
toggleState(mc, myFunction);
}
function toggleState(mc:MovieClip, funct:Function):void
{
//change the button state
mc._toggled = !mc._toggled;
mc.gfx1.visible = !mc._toggled;
mc.gfx2.visible = mc._toggled;
funct();
}
fuction myFunction():void
{
trace('fired');
}
您可以做的是让函数接受一个对象和一个属性名(字符串),然后使用语法更改对象的属性。例如:
function toggle(object:Object, property:String):void {
object[property] = !object[property];
}
var object:Object = { checked: true }
trace(object.checked); // true
toggle(object, "checked");
trace(object.checked); // false
因为您已经将它设置为全局变量,这意味着所有函数都已经可以访问它,所以不需要在它们之间传递它。只需直接从toggleState
方法中设置myVar
。很抱歉,我应该澄清我希望能够将不同的变量传递到函数中,因此我无法从函数中设置“myVar”方向。我编辑了这篇文章来澄清。谢谢在AS3中,属于基本数据类型(包括Boolean、Number、int、uint和String)的对象的行为就像是通过值传递的,而不是通过引用传递的。您需要将基本体包装成非基本体类型,例如对象,然后通过引用传递。谢谢这为我节省了大约50行重复代码。