8
votes

Avenir de la déclaration avec javascript

Je sais que l'utilisation du avec -statement n'est pas recommandé en JavaScript et est interdit à Ecmascript 5, mais il permet de créer de belles DSLS dans JavaScript.

Par exemple CoffeeSeCup -Templier moteur et le Zappa Web DSL. Ces utilisations certains très Weird Méthodes de Scoping avec le avec -statement se sentir envers eux.

Y a-t-il un avenir avec le avec -Statement et ces types de DSLS?

Cet effet DSL peut-il être obtenu sans le avec -statement?


1 commentaires

ES Les prochains littéraux quasi semblent devenir un outil JS DSL.


4 Réponses :


9
votes

avec "interdit" dans ECMAScript 5 est une mauvaise idée commune .

uniquement en mode strict de ECMAScript 5 - qui est opt-in , esprit vous - avec instruction est une erreur de syntaxe. Donc, vous pouvez certainement toujours utiliser avec dans des implémentations complètes entièrement ECMAScript 5, tant qu'ils se produisent dans le code non strict (ou bâclé, comme Crockford appelle IT). Ce ne sera pas jolie pour la performance (puisque la simple présence de avec tue souvent diverses optimisations dans les moteurs modernes) mais cela fonctionnera.

Les versions futures de ECMAScript sont très susceptibles d'être basées sur un comportement de mode strict, bien que cela soit également probablement opt-in. Donc, être conforme au mode strict, c'est certainement une bonne idée en matière de vérification future de vos scripts.


0 commentaires

10
votes

à Coffeescript, il y a une belle astuce pour continuer à utiliser des DSL de fantaisie sans utiliser avec : xxx


3 commentaires

Ah, génial! C'est presque aussi propre que le truc. Quelqu'un encore implémenté un moteur de modèles utilisant ceci?


Ne le pense pas, mais il devrait être possible d'adapter cofefealp ( github.com/mauricemach/coffeekup ) à cet effet.


Ce n'est pas la même chose que ce que "avec" fait. "Avec" met les variables directement dans la portée, pas comme des propriétés de "ceci".



2
votes

Pourquoi ne pas simplement affecter un var pour pointer sur l'objet au lieu d'utiliser?

'avec' style: p> xxx pré>

style "var": p >

var o = a_long_object_name_that_is_bloated;
o.propertyA = 'moo';
o.propertyB = 'cow';


0 commentaires

1
votes

Répondre à la question de Epeli, jetez un coup d'œil à cafeMugg qui fait ce que CoffeeSeCup ne fait que l'utilisation de la technique d'Adrien. Il utilise ceci. au lieu du avec la relève .


0 commentaires