with

可用性

Flash Player 5。

用法

with (object) {
  statement(s);
}

参数

object 动作脚本对象或影片剪辑的一个实例。

statement(s) 包括在大括号中的一个动作或一组动作。

返回

无。

说明

语句;允许您使用 object 参数指定一个对象(比如影片剪辑),并使用 statement(s) 参数计算该对象中的表达式和动作。这可以使您不必重复书写对象的名称或路径。

object 参数将成为读取 statement(s) 参数中的属性、变量与函数的上下文。例如,如果
objectmy_array,且指定的属性中有 lengthconcat 这样两个属性,则这些属性将自动作为 my_array.lengthmy_array.concat 进行读取。在另一个示例中,如果 object
state.california,则 with 动作中的任何动作或语句将从 california 实例中调用。

查找 statement(s) 参数中某个标识符的值时,动作脚本将从 object 指定的范围链的开头开始查找,并按照特定的顺序在范围链的每个级别中搜索该标识符。

with 动作使用范围链解析标识符,该范围链从下面列表中的第一项开始,一直到最后一项结束:

若要在 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 设置为默认对象可以将标识符 cossinPI 分别解析为
Math.cosMath.sinMath.PI。标识符 axyr 不是 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 的子级。该语句设置 fresnosalinas_alpha 值,而不改变
california_alpha 值。

with (california){
  with (fresno){
    _alpha = 20;
  }
  with (salinas){
    _alpha = 40;
  }
}

另请参见

tellTarget