Flash Player 5。
with (object
) {statement(s)
;
}
object
动作脚本对象或影片剪辑的一个实例。
statement(s)
包括在大括号中的一个动作或一组动作。
无。
语句;允许您使用 object
参数指定一个对象(比如影片剪辑),并使用 statement(s)
参数计算该对象中的表达式和动作。这可以使您不必重复书写对象的名称或路径。
object
参数将成为读取 statement(s)
参数中的属性、变量与函数的上下文。例如,如果 object
为 my_array
,且指定的属性中有 length
和 concat
这样两个属性,则这些属性将自动作为 my_array
.length
和 my_array.concat
进行读取。在另一个示例中,如果 object
为 state.california
,则 with
动作中的任何动作或语句将从 california
实例中调用。
查找 statement(s)
参数中某个标识符的值时,动作脚本将从 object
指定的范围链的开头开始查找,并按照特定的顺序在范围链的每个级别中搜索该标识符。
with
动作使用范围链解析标识符,该范围链从下面列表中的第一项开始,一直到最后一项结束:
with
动作的 object
参数中指定的对象。with
动作的 object
参数中指定的对象。若要在 with
动作中设置变量,该变量必须已在 with
动作外部进行了声明,或者您必须输入该变量所生存时间轴的完整路径。如果在 with
动作中设置了未声明的变量,则 with
动作将根据范围链查找该值。如果该变量尚不存在,则将在调用 with
动作的时间轴上设置此新值。
在 Flash 5 或更高版本中,with
动作替换了已不鼓励使用的 tellTarget
动作。建议您使用 with
而不使用 tellTarget
,因为前者是对 ECMA-262 标准的一个标准动作脚本扩展功能。with
动作与 tellTarget
动作的主要区别在于:with
采用对影片剪辑或其它对象的引用作为其参数,而 tellTarget
采用标识影片剪辑的目标路径字符串作为其参数,且不能用于指向
对象。
下面的示例设置 someOther_mc
实例的 _x
和 _y
属性,然后指示 someOther_mc
转到第 3 帧并停止。
with (someOther_mc) { _x = 50; _y = 100; gotoAndStop(3); }
下面的代码片断显示不使用 with
动作如何编写上面的代码。
someOther_mc._x = 50; someOther_mc._y = 100; someOther_mc.gotoAndStop(3);
还可使用 tellTarget
动作编写这段代码。但是,如果 someOther_mc
不是影片剪辑,而是一个对象,则不能使用 with
动作。
tellTarget ("someOther_mc") { _x = 50; _y = 100; gotoAndStop(3); }
with
动作对于同时访问一个范围链列表中的多项十分有用。在下面的示例中,内置 Math
对象被放置在范围链的前面。将 Math
设置为默认对象可以将标识符 cos
、sin
和 PI
分别解析为 Math.cos
、Math.sin
和 Math.PI
。标识符 a
、x
、y
和 r
不是 Math
对象的方法或属性,但由于它们处于函数 polar()
的对象激活范围内,所以会将它们解析为相应的局部变量。
function polar(r) { var a, x, y; with (Math) { a = PI * r * r; x = r * cos(PI); y = r * sin(PI/2); } trace("area = " +a); trace("x = " + x); trace("y = " + y); }
可以使用嵌套的 with
动作访问多重范围中的信息。在下面的示例中,实例 fresno
和实例 salinas
是实例 california
的子级。该语句设置 fresno
和 salinas
的 _alpha
值,而不改变 california
的 _alpha
值。
with (california){ with (fresno){ _alpha = 20; } with (salinas){ _alpha = 40; } }