Je vois des messages sur un "nouveau" objet.create qui rend l'énumération configurable. Cependant, il s'appuie sur une méthode d'objet.defineProperty. Je ne trouve pas de mise en œuvre d'une navigation croisée pour cette méthode. p>
Sommes-nous bloqués écrire pour l'ancien objet.create? Je ne peux pas écrire des choses qui ne fonctionneront pas dans IE6 / 7. P>
3 Réponses :
pour ce que ça vaut la peine, P>
objet.defineProperty fonctionne dans IE8 et FF4. < / p>
Cela signifie qu'il est intéressant de faire fonctionner Sniff et de la mettre en œuvre là où il est utile de voir car vous espérez que la mise à niveau d'IE 6/7 à 8/9 se produira dans les prochaines années. P>
Une autre chose à méfier est que la propriété Dontenum a un bogue dans Jscript p>
Vous devrez travailler autour de la façon dont vous utilisez la propriété Dontenm dans IE. P>
[EDIT]: P>
Voici la documentation de Internet Explorer et Un lien vers le ES5 Spécification (page 122 , 15.2.3.6) P>
C'est bon de savoir que c'est dans IE8, j'ai vu un aperçu de ce qui aurait pu être une mise en œuvre. Donc, ma question est toujours là une mise en œuvre publiée de DéfinitionProperty?
Il n'y a pas de telle mise en œuvre pour IE6 / 7, j'ai peur.
@Drew: objet.defineProperty code> fonctionne partiellement i> IE8, vous pouvez l'utiliser uniquement sur DOM ÉLÉMENTS I>. J'ai laissé un Réponse , qui, en bref, dit: vous ne pouvez pas . Les attributs de propriété ne peuvent pas être définis sur les implémentations basées sur ECMAScript 3 ....
Je n'ai même pas remarqué que cela ne fonctionne que sur les éléments DOM. Merci d'avoir fait remarquer cela.
Il y a plusieurs choses que vous ne pouvez pas imiter à partir de la méthode ECMAScript 5 Comme vous l'avez vu, l'argument des propriétés vous donnera des problèmes car Mise en œuvre basée sur E3 Il existe L'objet aussi em> les propriétés de l'accessor Donnez-vous des problèmes, ils pourraient être mimiqués em> avec des méthodes non standard largement prises en charge telles que Un autre Mise à côté des descripteurs de la propriété, est-ce que le Ceci ne peut pas être émulé avec le objet "CODE> objet" Crockford Code> Shim a>, parce que lorsque l'opérateur code> neuf code> est utilisé avec une fonction de constructeur comportant un dans certaines implémentations -v8, SpiderMonkey, Rhino, etc ...- Ils ont une condition de mesure < href = "https://developer.mozilla.org/en/javascript/referce/global_objects/Object/proto" rel = "noreferrer"> i w Si vous souhaitez recommander, si vous souhaitez cibler d'anciens navigateurs pour n'utiliser pas ces fonctionnalités, car il n'ya aucun moyen de les faire fonctionner correctement sur ces environnements. P> Si vous souhaitez toujours utiliser Ce qui suit serait un la version plus sûre em> de la objet "CODE> Object.create CODE> Shim A>: p> Quoi qu'il en soit, utilisez-le soigneusement. p> p> Object.create CODE> sur un environnement ECMAScript 3.
objet.defineProperty code> méthode comme @raynos em> mentionné, fonctionne sur IE8, mais
__ definegetter __ code>
/ __ définir __ code>
, mais encore une fois, vous ne pouvez pas changer les attributs de propriété em>. P> objet.create code> peut accepter
null code> comme argument, pour créer un objet qui n'hérite pas de rien. P>
Propriété code> Propriété contenant
propriété qui pourrait être utilisé pour Définir un null code> -or toute autre valeur de non-objet -, l'objet nouvellement créé hériter de
objet.pototype code> de toute façon par défaut. p>
__ proto __ code>
null code> [[prototype]], mais à nouveau, cela n'est pas standard et que cela ne fonctionnera jamais sur IE. P>
objet. créer code>, sans utiliser l'argument em> propriétés em>, vous pourriez, mais je vous recommanderais de détecter les éléments qui ne peuvent pas être émulés. P>
Si vous voulez une bonne implémentation de DefineProperty (), jetez un coup d'œil à https://github.com/ Kriskowal / ES5-Shim P>
Malheureusement, vous ne pouvez pas faire d'énumération configurable dans un environnement ES3. Cette cale vous permettra d'appeler l'API dans l'un ou l'autre environnement, mais les propriétés seront toujours énormes sous ES3. P>