with | 语句 |
用法
下例设置
with (object:Object) { // 语句} |
建立要用于执行一条或多条语句的默认对象,从而潜在地减少需要编写的代码量。
object
参数变为在其中读取 statement(s)
参数中的属性、变量和函数的上下文。例如,如果 object
为 my_array
,并且指定的两个属性为 length
和 concat
,则这些属性将自动读取为 my_array.length
和 my_array.concat
。在另一个示例中,如果 object
是 state.california
,则 with
语句内部的任何动作或语句将从 california
实例的内部调用。
若要查找 statement(s)
参数中某个标识符的值,ActionScript 将从 object
指定的范围链的开头处开始,按照特定的顺序在范围链的每个级别中搜索该标识符。
with
语句使用范围链解析标识符,该范围链从下面列表中的第一项开始,到最后一项结束:
- 该对象在最内层的
with
语句中的object
参数中指定。 - 该对象在最外层的
with
语句中的object
参数中指定。 - Activation 对象(脚本调用函数时自动创建的临时对象,该函数包含函数中调用的局部变量)
- 该对象包含当前正在执行的脚本
- 全局对象(如 Math 和 String 等内置对象)。
若要在 with
语句内部设置变量,必须已在 with
语句外部声明了该变量,或必须输入了希望该变量所存在的时间轴的完整路径。如果在 with
语句中设置了未声明的变量,with
语句将根据范围链查找该值。如果该变量尚不存在,则将在调用 with
语句的时间轴上设置此新值。
参数
object:Object — ActionScript 对象或影片剪辑的一个实例。 |
下例设置
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);
with
语句对于同时访问一个范围链列表中的多个项很有用。下例中,内置的 Math 对象放置在范围链的前部。将 Math 设置为默认对象会将标识符 cos
、sin
和 PI
分别解析为 Math.cos
、Math.sin
和 Math.PI
。标识符 a
、x
、y
和 r
不是 Math 对象的方法或属性,但由于它们存在于函数 polar()
的对象激活作用域内,所以将其解析为相应的局部变量。
function polar(r:Number):void
{
var a:Number, x:Number, y:Number;
with (Math)
{
a=PI * pow(r, 2);
x=r * cos(PI);
y=r * sin(PI / 2);
}
trace("area = " + a);
trace("x = " + x);
trace("y = " + y);
}
polar(3); /* output: area = 28.2743338823081 x = -3 y = 3*/
{
var a:Number, x:Number, y:Number;
with (Math)
{
a=PI * pow(r, 2);
x=r * cos(PI);
y=r * sin(PI / 2);
}
trace("area = " + a);
trace("x = " + x);
trace("y = " + y);
}
polar(3); /* output: area = 28.2743338823081 x = -3 y = 3*/