Question

Est-il possible de propriétés d'objet d'accès qui ne sont accessibles que par la notation carrée lorsque le support dans un « avec » déclaration.

Exemple:

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"?
}
Était-ce utile?

La solution

Wow c'est vieux, mais les réponses sont ici mal, il est en fait de façon à faire exactement ce que vous demandez.

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

Avez-vous vu? valueOf () est le mot magique. Elle retourne la valeur primitive de l'objet parent, ou si l'objet n'a pas de valeur primitive, l'objet lui-même. Chaque objet et objet comme primitives hérite cette méthode, car il est construit dans la propriété sur Object.prototype. Alors ... voilà.

Autres conseils

En général, le mot-clé avec est utilisé pour résoudre de longs espaces de noms, pas une seule référence d'objet. Je suppose que je dois savoir ce que l'intention d'utiliser le mot-clé ici est. Je ne crois pas que l'analyseur de syntaxe vous permettra de sortir avec o.bad:property, qui est essentiellement ce qui est codé en utilisant avec.

Si l'objet o dans l'exemple était juste un raccourci vers un espace de noms plus, ma recommandation serait d'arrêter un court objet dans la résolution en utilisant avec, puis mettre la boîte de votre propriété dans une chaîne comme ça ...

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

L'espoir qui aide.

Si je comprends avec (o) saute essentiellement à la portée de o, si les propriétés sont accessibles par leur nom. « Mauvais » et « goodProperty » respectivement

with(o) {
  bad="new value";
  goodProperty=22;
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top