Pregunta

vi código JavaScript que se inicia con with. Eso es un poco confuso. ¿Qué hacer y cómo puede ser utilizado correctamente?

with (sObj) return options[selectedIndex].value;
¿Fue útil?

Solución

Se añade al alcance de las declaraciones contenidas en el bloque:

return sObj.options[selectedIndex].value;

puede llegar a ser:

with (sObj)
    return options[selectedIndex].value;

En su caso, doens't hacer mucho ... pero tenga en cuenta lo siguiente:

var a, x, y;
var r = 10;
a = Math.PI * r * r;
x = r * Math.cos(PI);
y = r * Math.sin(PI /2);

Se convierte en:

var a, x, y;
var r = 10;
with (Math) {
  a = PI * r * r;
  x = r * cos(PI);
  y = r * sin(PI / 2);
}

... ahorra un par de pulsaciones de teclas. La documentación de Mozilla realmente hace un trabajo bastante bueno de explicar las cosas en un poco más de detalle (junto con los pros y los contras de su uso):

con - Mozilla Developer Center

Otros consejos

la declaración with es el azúcar sintáctica pura, pero también puede causar algunos errores desagradables.

con la Declaración Considerado nocivo para la clarificación :

  

Si no puede leer un programa y estar seguro de que sabe lo que va a hacer, no se puede tener la confianza de que va a trabajar correctamente. Por esta razón, la declaración with debe ser evitado.

En ese bloque con el que no tiene que escribir:

sObj.options[selectedIndex].value

, pero sólo se puede utilizar:

options[selectedIndex].value

Es el equivalente a

return sObj.options[selectedIndex].value;

With le permite emitir un bloque de instrucciones en el contexto de un objeto en particular. Por lo tanto, todas las instrucciones en el bloque with se considera que son miembros del objeto entre paréntesis.

Esto puede hacer que el código sea más legible, a veces, y también puede dar lugar a la ambigüedad, ya que las referencias a variables pueden ser ya sea con sObj o global.

de usos legítimos para javascript "con la" declaración : D

Me recomiendan no usar esto a causa de problemas de rendimiento, pero lo que los medios anteriores es:

para el objeto sObj (en este caso presumiblemente un elemento select), todos los niños y las propiedades que se hace referencia en este (o entre seguir llaves) tratamiento que como su ámbito padre.

Su ejemplo podría ser reescrita como ...

return sObj.options[selectedIndex].value;

... como los '' con todos los lugares de los estados correspondientes estados en el ámbito del objeto suministrado. En este caso, es bastante inútil, pero, si estuviera haciendo una gran cantidad de operaciones de 'sObj', a continuación, se ahorra un montón de escribir.

ejemplo totalmente ficticio ..

with (sObj) 
{
   if(options[selectedIndex].value < 10){
       options[selectedIndex].value++;
       total+ = options[selectedIndex].value;
   }
}

Pero, una vez dicho esto, es a menudo el caso de que la tipificación de ahorro se puede lograr de mejor manera.

No es una función (como se indica en el título de la pregunta antes de que fuera editado), pero un comunicado. Se puede tener más sentido si el ejemplo de código se formatea así:

with (sObj){
    return options[selectedIndex].value;
}

En cuanto a lo que hace ( Fuente )

  

La sentencia with establece el objeto predeterminado para un conjunto de estados. JavaScript mira hacia arriba los nombres no cualificados dentro del conjunto de instrucciones para determinar si los nombres son propiedades del objeto predeterminado. Si un nombre no coincide con una propiedad, entonces la propiedad se utiliza en la declaración; de lo contrario, se utiliza una variable local o global.

Lo que significa que, en el ejemplo de código, se comprueba primero si options es una propiedad de sObj. Si es entonces options refiere a sObj.options, de lo contrario se comprueba otros ámbitos para una variable definida por el nombre options

La desventaja de usar una declaración with es que es imposible saber de sólo mirar el código de lo que se accede. Hay otras alternativas mejores como se muestra en este artículo

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top