Pregunta

¿Es posible acceder a las propiedades del objeto a las que solo se puede acceder con la notación de soporte cuadrado cuando está dentro de una declaración "con"?

Ejemplo:

var o = { "bad-property": 1, "another:bad:property": 2, "goodProperty": 3 };

with(o) {
    console.log(goodProperty); // works awesome
    console.log(???) // how to access "bad:property"?
}
¿Fue útil?

Solución

Vaya, esto es antiguo, pero las respuestas aquí están mal, de hecho, hay una manera de hacer exactamente como usted le pide.

with({'!@#$%': 'omg', d: 'hai'}) {
  console.log(d); //hai - naturally
  console.log(valueOf()['!@#$%']); //omg - OMG
}

¿Lo viste? valor de() es la palabra mágica. Devuelve el valor primitivo de su objeto principal, o si el objeto no tiene valor primitivo, el objeto en sí. Cada objeto y objeto primitivo hereda este método, ya que es una propiedad incorporada en Object.prototype. Ahí vas.

Otros consejos

En general, la palabra clave se usa para resolver espacios de nombres largos, no una sola referencia de objeto. Supongo que necesitaría saber cuál es la intención de usar la palabra clave aquí. No creo que el analizador de sintaxis te permita salirse con la tuya o.bad:property, que es básicamente lo que se está codificando con.

Si el o El objeto en el ejemplo era solo un atajo a un espacio de nombres más largo, mi recomendación sería detener un objeto corto en la resolución usando con con, luego colocar su propiedad en una cadena como esta ...

var nmSpace = new Object();
nmSpace.o = { "bad:property": 1, "goodProperty": 2 };

with (nmSpace) {
    alert(o['goodProperty']); // works awesome
    alert(o['bad:property']);  // now accesses "bad:property"!
}

Espero que ayude.

Según tengo entendido con (o) esencialmente salta al alcance de O, por lo que las propiedades son accesibles por su nombre: "malo" y "GoodProperty" respectivamente.

with(o) {
  bad="new value";
  goodProperty=22;
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top