Prise en charge de JavaScript getter dans IE8
Découvrez ce code. C'est très simple objet JavaScript qui est mis en œuvre à l'aide de Motif De Module (et vous pouvez voir l'exemple vivant au ce violon adresse)
var human = function() {
var _firstName = '';
var _lastName = ''
return {
get firstName() {
return _firstName;
}, get lastName() {
return _lastName;
}, set firstName(name) {
_firstName = name;
}, set lastName(name) {
_lastName = name;
}, get fullName() {
return _firstName + ' ' + _lastName;
}
}
}();
human.firstName = 'Saeed';
human.lastName = 'Neamati';
alert(human.fullName);
Cependant, IE8 ne prend pas en charge JavaScript get
et set
mots-clés. Vous pouvez le tester et de voir MDN.
Que dois-je faire pour rendre ce script compatible avec IE8?
source d'informationauteur Saeed Neamati
Vous devez vous connecter pour publier un commentaire.
Le changer complètement. Par exemple, au lieu d'utiliser des propriétés d'accesseur, utilisez une combinaison de propriétés standard et fonctions:
Quelqu'un d'autre a suggéré d'utiliser un objet DOM dans IE et en ajoutant les propriétés à l'aide de
Object.defineProperty()
. Tout ça peut fonctionner, je recommande vivement contre cette approche pour plusieurs raisons, par exemple, que le code que vous écrivez peut ne pas être compatible sur tous les navigateurs:Cela est vrai au moins de Chrome. De toute façon, il est plus sûr et plus facile d'écrire du code qui fonctionne sur tous les navigateurs que vous voulez soutenir. Tout confort que vous gagnez à être capable d'écrire du code pour profiter de getters et setters a été perdu sur le code que vous avez écrit ciblant spécifiquement d'Internet Explorer 8.
C'est, bien sûr, en plus de la réduction de la performance, le fait que vous ne serez pas en mesure d'utiliser un
for...in
boucle sur l'objet et la confusion qui s'ensuit lorsque vous utilisez une propriété vous pensiez que vous avez défini, mais il a été pré-existant sur l'objet DOM.Vous ne pouvez pas (comme Andy a répondu)
Le plus proche de la solution de rechange serait
Démo à http://jsfiddle.net/gaby/WYjqB/2/
IE8 soutient les getters et les setters sur les nœuds DOM, donc si vous voulez vraiment avoir des getters et setters, vous pouvez le faire:
Remarque cela vous donne un peu de performance significatif coup, je ne voudrais pas utiliser cette technique si vous avez besoin de créer des milliers d'objets de ce genre. Mais si vous n'êtes pas inquiet au sujet de la performance de cet objet particulier, il va vous dépanner. Et si vous ne pouvais pas moins de soins sur ie8 performance, et juste envie de travailler, utiliser cette technique pour ie8 et vous êtes dorée : )
Le vérifier sur http://robertnyman.com/2009/05/28/getters-and-setters-with-javascript-code-samples-and-demos/
Vous pouvez trouver les cas de test sur le même site à http://robertnyman.com/javascript/javascript-getters-setters.html#object-defineproperty
Résultat: