with

Disponibilidad

Flash Player 5.

Sintaxis

with (object) {
  statement(s);
}

Parámetros

object Instancia de un objeto o clip de película de ActionScript.

statement(s) Acción o grupo de acciones entre llaves.

Valor devuelto

Ninguno.

Descripción

Sentencia; permite especificar un objeto (por ejemplo, un clip de película) con el parámetro object y comprobar el valor de expresiones y acciones dentro de ese objeto con el parámetro statement(s). Esto evita que tenga que escribir el nombre del objeto o la ruta al objeto continuamente.

El parámetro object pasa a ser el contexto en el que se leen las propiedades, variables y funciones en el parámetro statement(s). Por ejemplo, si el object es my_array y dos de las propiedades especificadas son length y concat, dichas propiedades se leen automáticamente como my_array.length y my_array.concat. En otro ejemplo, si el object es state.california, se llama a las acciones y sentencias de la acción with desde la instancia california.

Para averiguar el valor de un identificador del parámetro statement(s), ActionScript se inicia al principio de la cadena de ámbito especificada por el object y busca el identificador en cada nivel de la cadena de ámbito, en un orden específico.

La cadena de ámbito utilizada por la acción with para resolver identificadores comienza con el primer elemento de la lista siguiente y continúa hasta el último:

Para establecer una variable dentro de una acción with, la variable debe haber sido declarada fuera de la acción with o debe introducir la ruta de acceso completa a la línea de tiempo en la que desea que resida la variable. Si establece una variable en una acción with sin haberla declarado, la acción with buscará el valor según la cadena de ámbito. Si la variable todavía no existe, el nuevo valor se establecerá en la línea de tiempo desde la que se llamó a la acción with.

En Flash 5 o posterior, la acción with sustituye a la acción tellTarget que se eliminó. Se recomienda utilizar with en lugar de tellTarget debido a que es una extensión estándar de ActionScript del estándar ECMA-262. La diferencia principal entre las acciones with y tellTarget es que with toma una referencia a un clip de película o a otro objeto como parámetro, mientras que tellTarget toma una cadena de ruta de destino que identifica un clip de película como su parámetro y no se puede utilizar para especificar el destino de objetos.

Ejemplo

En el ejemplo siguiente se establecen las propiedades _x e _y de la instancia someOther_mc y se indica a someOther_mc que vaya al fotograma 3 y se detenga.

with (someOther_mc) {
  _x = 50;
  _y = 100;
  gotoAndStop(3);
}

El siguiente fragmento de código muestra cómo escribir el código anterior sin utilizar una acción with.

someOther_mc._x = 50;
someOther_mc._y = 100;
someOther_mc.gotoAndStop(3);

También podría escribir este código mediante la acción tellTarget. Sin embargo, si someOther_mc no fuera un clip de película, sino un objeto, no podría utilizar la acción with.

tellTarget ("someOther_mc") {
  _x = 50;
  _y = 100;
  gotoAndStop(3);
}

La acción with es útil para acceder a varios elementos de una lista de cadena de ámbito simultáneamente. En el ejemplo siguiente, el objeto incorporado Math se sitúa al frente de la cadena de ámbito. Si se establece Math como valor predeterminado, el objeto resuelve los identificadores cos, sin y PI en los valores Math.cos, Math.sin y Math.PI, respectivamente. Los identificadores a, x, y y r no son métodos ni propiedades del objeto Math, pero como existen en el ámbito de activación de objeto de la función polar(), se resuelven en las variables locales correspondientes.

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);
}

Puede utilizar acciones with anidadas para acceder a la información en varios ámbitos. En el ejemplo siguiente, la instancia fresno y la instancia salinas son instancias secundarias de la instancia california. La sentencia establece los valores _alpha de fresno y salinas sin cambiar el valor _alpha de california.

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

Véase también

tellTarget