Domanda

E 'possibile accedere alle proprietà degli oggetti che possono essere raggiunte solo con la notazione parentesi quadra, quando all'interno di un "con" l'istruzione.

Esempio:

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"?
}
È stato utile?

Soluzione

Wow questo è vecchio, ma le risposte qui sono sbagliato, non v'è infatti modo di fare esattamente come si chiede.

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

L'hai visto? valueOf () è la parola magica. Restituisce il valore di base del suo oggetto genitore, o se l'oggetto non ha valore di base, l'oggetto stesso. Ogni oggetto e l'oggetto simile eredita primitive questo metodo, in quanto è costruito in proprietà su Object.prototype. Quindi ... ci si va.

Altri suggerimenti

In genere, la parola chiave con viene utilizzato per risolvere gli spazi dei nomi lunghi, non un solo riferimento a un oggetto. Credo che avrei bisogno di sapere che cosa l'intento di utilizzare la parola chiave qui è. Non credo che il parser sintassi vi permetterà di ottenere via con o.bad:property, che è fondamentalmente quello che è stato codificato utilizzando con.

Se l'oggetto o nell'esempio era solo una scorciatoia per uno spazio dei nomi più lungo, la mia raccomandazione sarebbe quella di fermarsi un oggetto nella risoluzione utilizzando con, poi mettere box vostra proprietà in una stringa come questo ...

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"!
}

La speranza che aiuta.

Se ho capito bene con (o) salta essenzialmente alla portata della o, quindi le proprietà sono accessibili con il loro nome:. “Cattivo” e “goodProperty”, rispettivamente

with(o) {
  bad="new value";
  goodProperty=22;
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top