2009-11-16 11 views
4

En essayant de porter et en jouant généralement avec un code non-navigateur, je suis tombé sur des getters et des setters qui ressemblaient à des propriétés d'objet normales. Quelque chose comme ceci:En JScript, est-il possible d'implémenter des getters et des setters qui ressemblent à des propriétés d'objets de l'extérieur?

js> var o = { 
    a: 4, 
    get b(){ 
     return this.a + 3; 
    }, 
    set b(val){ 
     this.a = val - 3; 
    } 
}; 
js> o.a 
4 
js> o.b 
7 
js> o.b=10 
10 
js> o.a 
7 

Cela semble fonctionner dans les versions récentes de Rhino et SpiderMonkey, mais est-il possible de mettre en œuvre ou simuler le comportement (la syntaxe de définition est moins important pour moi) dans JScript (Windows Script Host) ?

+1

désolé à ce sujet. Je ne vais pas changer d'avis à propos des réponses aux questions précédentes. – hillu

Répondre

1

La réponse est No. Les setters et getters sont juste des propriétés qui agissent comme des fonctions, mais il n'y a aucun moyen d'émuler la syntaxe correctement. J'ai eu un concept à mi-chemin d'émuler des getters et des setters sur des éléments HTML dans IE12 en utilisant des comportements, mais même cela s'est avéré plus difficile que je ne l'imaginais. Même IE8 ne supporte que les getters/setters sur les objets DOM et non les objets JScript, donc je pense que c'est quelque chose que l'équipe JScript doit inclure, si jamais ils le font.

Si seulement quelqu'un avait pensé inclure des setters et des getters dans les implémentations JScript/ECMAScript originales.

+0

Je ne pense pas vraiment que les getters et setters qui ressemblent à des attributs soient une bonne idée en général parce que la syntaxe tend à invoquer des hypothèses lors de la lecture du code qui le rendent plus difficile à comprendre. Et il semble que l'affirmation "Javascript a été un langage stable depuis 10 ans" a moins de substance que je ne le pensais ... – hillu

+0

Juste un FYI: dans IE8, les propriétés des accesseurs (getters/setters) sont implémentées sur les objets DOM uniquement . Dans une réponse à une question demandant pourquoi cette limitation existe, un Microsoft employant dit que la fonctionnalité était un ajout de dernière minute et en raison de contraintes de temps, il ne pouvait pas être étendu aux objets JScript. Donc, les doigts croisés, nous pourrions les voir pleinement mis en œuvre dans IE9. JavaScript a été une langue stable pendant un moment. Il manque juste beaucoup de fonctionnalités que vous attendez normalement d'une langue. –

0

Selon this article (par John Resig, créateur de jQuery), getters Javascript et setters sont pris en charge dans JScript.NET 8.