Flash5 ActionScript高级编程指南(5)
发布时间:2008-08-14 阅读数: 次 来源:网乐原科技
二、点语法对象与目标路径的使用
3、相关函数与指令
eval(expression)是与点语法对象和目标路径的使用有关的最常用的函数。它的实质是把目标路径转化成点语法对象。系统先把expression自动转化成字符串,相当于调用了一次String(expression),得到"expression_string"的形式。这时的"expression_string"必须为目标路径形式(否则无返回值),然后返回"expression_string"所指代的内容。
为什么说是内容而不说是值呢?这是因为eval(expression)的返回值实际上是一个点语法对象。比如:
eval("anyMovieClip"+1)._x = 200;
仍是合法的语句。如果说._x的左边是一个值似乎就不合适了。类似的如前面提到的2.2式。故对于形如:
c = a+eval("b");
的理解(设b的值为1)不应为c=a+1,而应该是c=a+b。在处理形如上述2.1式的表达式时,Flash5推荐使用eval函数,即写成:
for (i=1;i<10;i++) {
eval("myMovieClip"+i)._x = 20*i;
}
另当"expression_string"指代的是一个影片片段时,返回的是形同_level0.anyMovieClip的绝对路径形式,所以就不能使用如_root.eval(expression)之类的调用了。
with与tellTarget也是与点语法对象和目标路径密切相关的指令。其中with是Flash5中新增加的。它们的使用格式相同:
with (expression) {
...
}
tellTarget (expression) {
...
}
expression可以是点语法对象,也可以是目标路径。对于with来说,expression可指代对象和影片片段,而对于tellTarget来说,expression只能是影片片段。
虽然它们形式上极为相仿(尤其当expression同指影片片段时),但处理过程却并不相同。试比较(a非myMovieClip的成员变量):
a = 1;
with (myMovieClip) {
trace(a); // 2.3式
}
与
a = 1;
tellTarget (myMovieClip) {
trace(a); // 2.4式
}
前者输出1,而后者输出空值。原因是tellTarget对它所包含的语句中的所有变量、对象等都加上expression所表示的路径,而with只对其中expression所指对象或影片片段内已经定义过的变量、对象等加上expression所表示的路径。所以2.3式就相当于with外的:
trace(a);
而2.4式就相当于tellTarget外的:
trace(myMovieClip.a);
当然,如果a本就是myMovieClip的成员的话,二者的输出就一样了。