本站原创文章,转载请注明: 转载自zrong's Blog,原文 FMS中变量的作用域,欢迎使用文章源码进行转载。
本站转载文章会标明[转],转载请注明原始作者文章地址。
我一直认为,在FMS中,没有定义在Client对象中的变量都是全局的(不包括函数中定义的局部变量)。但是我发现我的理解大错特错了。
为了测试”全局”变量的作用域,我写了下面这段代码(服务器端):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | var aa = 1; var bb = 2; var cc = 3; application.onConnect = function(newClient){ this.acceptConnection(newClient); } Client.prototype.test = function(a, b, c){ trace("更改之前aa:"+aa); trace("更改之前bb:"+bb); trace("更改之前cc:"+cc); aa = a; bb = b; cc = c; trace("更改之后aa:"+aa); trace("更改之后bb:"+bb); trace("更改之后cc:"+cc); } |
对应的客户端代码:
1 2 3 4 5 6 7 8 9 10 | var nc1:NetConnection = new NetConnection(); var nc2:NetConnection = new NetConnection(); nc1.connect("rtmp:/test/1"); nc2.connect("rtmp:/test/2"); btn1.onPress = function() { nc1.call("test", null, 4, 5, 6); }; btn2.onPress = function() { nc2.call("test", null, 7, 8, 9); }; |
执行的结果如下:

test/1的执行结果

test/2的执行结果
从上面的结果看,我以前认为的”全局”变量,仅仅只是初始值是”全局”的! :em11: 而当某个Client改变它之后,就”变成”了Client变量了。
那么,application中的变量又如何?
再看看修改过的服务器端代码(客户端代码不变):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | application.onAppStart = function(){ this.aaa = 1; this.bbb = 2; this.ccc = 3; } application.onConnect = function(newClient){ this.acceptConnection(newClient); } Client.prototype.test = function(a, b, c){ trace("更改之前application.aaa:"+application.aaa); trace("更改之前application.bbb:"+application.bbb); trace("更改之前application.ccc:"+application.ccc); application.aaa = a; application.bbb = b; application.ccc = c; trace("更改之后application.aaa:"+application.aaa); trace("更改之后application.bbb:"+application.bbb); trace("更改之后application.ccc:"+application.ccc); } |
执行的结果如下:

test/1的执行结果

test/2的执行结果
看来,application中的变量是一样的”下场”。 :em10:
8月16日,小结
经过上面的测试已经弄明白,保存在Client中的变量对于每个客户机都是不同的,application中的变量则可以在instance中共享,instance之间不能共享变量。(使用一些变通的方法是可以的)


最新评论