2010-06-21 3 views
16

Quels navigateurs Web utilisent le __proto__? Mozilla states que:JavaScript et __proto__ - quels navigateurs l'utilisent?

Notez que __proto__ peuvent ne pas être disponibles dans les versions JavaScript autres que dans Mozilla.

+0

Vous pouvez placer '__proto__' en arrière-plan' \ '' pour le formatage. –

+5

La mise en forme de StackOverflow n'est nulle que si vous ne prenez pas le temps de comprendre comment cela fonctionne. – deceze

+0

Aucune touche de retour arrière sur les claviers azerty FWIW –

Répondre

8

Cliquez here pour votre réponse.

Détails

La façon la plus générale serait de tester cette page dans différents navigateurs:

<html> 
    <head> 
    <script type="text/javascript"> 
     function a() {} 
     if ((new a).__proto__ === a.prototype) 
      alert('supported'); 
    </script> 

    </head> 
</html> 

Il avertit si un navigateur prend en charge __proto__. Je l'ai soumis à browsershots.org, ce qui créera des captures d'écran de la page dans de nombreux navigateurs différents. Ainsi, vous devriez voir - au moyen du message d'alerte - quel navigateur le supporte.

+1

Merci!Pour résumer, cela ne fonctionne pas sur IE, Safari <5 et Opera <10.50. – Tower

+7

Le lien n'est plus actif. Quelqu'un sait-il sur IE9? – Dave

+0

Je viens de tester cela dans IE9 et IE10. Cela ne fonctionne pas dans IE9, mais fonctionne dans IE10. – kzh

3

La fin de la phrase que vous avez envoyé See below for workarounds., où il y a une discussion sur une autre méthode qui utilise extends()super.prototype:

function extend(child, super){ 
    for (var property in super.prototype) { 
    if (typeof child.prototype[property] == "undefined") 
     child.prototype[property] = super.prototype[property]; 
    } 
    return child; 
} 
+0

Je sais, mais je veux savoir quels navigateurs Web supportent '__proto__'. Selon la réponse, je n'ai peut-être même pas besoin de ce genre de fonctionnalité. – Tower

+2

Je ne comprends pas pourquoi vous copiez les propriétés d'un objet dans un autre ... Cela annule le but du puissant héritage prototypique intégré à JS. – Marius

7

Le Browser Security Handbook a un tableau indiquant les navigateurs exposer __proto__.

Actuellement, ces navigateurs sont:

  • Firefox 2
  • Firefox 3
  • Safari
  • Chrome
  • Android

Les exclus:

  • IE 6, 7, 8
  • Opera
0

Ceci n'est pas une réponse directe à la question mais cela peut aider pour ceux qui veulent connaître le prototype de l'instance d'objet (c'est pour quoi __proto__ est souvent utilisé). Tous les navigateurs modernes (y compris IE9) prend en charge getPrototypeOf() qui peut être utilisé pour déterminer le prototype de l'objet. L'ironie du sort est que certains navigateurs encore réels comme IE7 et IE8 qui ne supportent pas Object.getPrototypeOf(obj) ne supportent pas non plus obj.__proto__. Pour ces navigateurs, vous pouvez utiliser obj.constructor.prototype. Cependant c'est un peu dangereux car cette propriété peut être redéfinie.

Questions connexes