2009-07-02 8 views
20

Pour une raison quelconque, Javascript getters/setters pour les objets personnalisés semblent fonctionner avec n'importe quel navigateur sauf IE.Javascript getters/setters dans IE?

IE a-t-il un autre mécanisme non standard pour cela? (Comme avec de nombreuses autres fonctionnalités)

Si non, existe-t-il des solutions de contournement pour obtenir la même fonctionnalité?

+1

IE9 et IE10 soutiennent maintenant: http: //kangax.github.com/es5-compat-table/ –

+0

Ils sont pris en charge sur les littéraux d'objet, mais pas sur les prototypes d'objets dans IE :(. http://robertnyman.com/javascript/javascript-getters-setters.html # regular-getters-and-setters – roguenet

Répondre

8

IE8 l'a jusqu'à defineProperty, mais uniquement pour les objets DOM. Mais supposément, il finira par venir aussi pour les objets JavaScript.

+4

Éventuellement? S o nous le verrons dans IE 10? ;) –

+0

Intéressant - je n'étais pas au courant que cela avait été ajouté! @musicfreak: vous et votre optimisme ensoleillé ... – Shog9

+27

Nous pouvons le voir dans IE10, mais nous allons encore coder pour IE6. – Nosredna

5

La publication de Resig fait référence à sa mise en œuvre d'env.js en utilisant pour la première fois la méthode des getters et setters que vous recherchez. La raison pour laquelle ce style fonctionne bien pour lui est qu'ils ne sont pas utilisés dans un environnement basé sur un navigateur, env.js est principalement axé sur les environnements JS ou de script côté serveur comme Rhino.

Pour gérer la compatibilité avec les navigateurs et vous concentrer sur un aspect que JavaScript réussit très bien, utilisez des fermetures pour vos méthodes getter et setter afin de protéger les propriétés des objets.

Par exemple:

foo: function(val) { 
    var bar = val; 
    this.setBar: function(newBar) { 
     bar = newBar; 
    }, 
    this.getBar: function() { 
     return bar; 
    } 
} 

qui se traduira par:

var checkFoo = foo("cool!"); 
alert(checkFoo.getBar()); //cool! 
checkFoo.setBar("nice!"); 
alert(checkFoo.getBar()); //nice! 
+3

est-ce encore un bon conseil 3 ans plus tard? En regardant cette table de compatibilité semble être le support dans ie c'est mieux: http://kangax.github.com/es5-compat-table/ –

2

Pour vieux navigateurs IE, vous pouvez également utiliser VB pour émuler getter et setter Jetez un oeil à ce getters & setters for all IE with cross browser VBClass!

+0

Vous voudrez peut-être ajouter le détail du noyau du lien que vous avez fourni. Comme il (votre réponse) se tient, bien que correct, l'URL que vous liez pour devenir indisponible votre sera moins utile. – talegna