2010-06-21 9 views
16

Quali browser Web utilizzano __proto__? Mozilla states che:JavaScript e __proto__ - quali browser lo usano?

Nota che __proto__ potrebbe non essere disponibile in versioni JavaScript diverse da quella in Mozilla.

+0

È possibile includere '__proto__' nei backtick' \ '' per la formattazione. –

+5

La formattazione StackOverflow fa schifo solo se non si prende il tempo necessario per capire come funziona. – deceze

+0

Nessun tasto inverso per le tastiere azerty FWIW –

risposta

8

Clicca here per la risposta.

dettagli

Il modo più generale sarebbe quello di verificare questa pagina in diversi browser:

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

    </head> 
</html> 

Si avvisa se un browser supporta __proto__. L'ho inviato a browsershots.org, che creerà screenshot della pagina in molti browser diversi. Quindi, dovresti vedere - tramite il messaggio di avviso - quale browser lo supporta.

+1

Grazie!Per riassumere, non funziona su IE, Safari <5 e Opera <10.50. – Tower

+7

Il link non è più attivo. Qualcuno sa di IE9? – Dave

+0

Ho appena provato questo in IE9 e IE10. Non funziona in IE9, ma funziona in IE10. – kzh

3

La fine della frase che hai postato è See below for workarounds., dove c'è una discussione su un metodo alternativo che utilizza 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

Lo so, ma voglio sapere quali browser supportano '__proto__'. A seconda della risposta, potrei anche non aver bisogno di quel tipo di funzionalità. – Tower

+2

Non capisco perché copi le proprietà da un oggetto a un altro ... Questo vanifica lo scopo della potente eredità prototipale incorporata in JS. – Marius

7

Il Browser Security Handbook ha una tabella che mostra quali browser esporre __proto__.

Attualmente, i browser sono:

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

Gli esclusi:

  • IE 6, 7, 8
  • Opera
0

Questa non è una risposta diretta alla domanda, ma può essere utile per coloro che desiderano conoscere il prototipo dell'istanza dell'oggetto (questo è per quello che viene spesso utilizzato __proto__). Tutti i browser moderni (incluso IE9) supportano getPrototypeOf() che può essere utilizzato per determinare il prototipo dell'oggetto. L'ironia del destino è che alcuni browser ancora attuali come IE7 e IE8 che non supportano Object.getPrototypeOf(obj) non supportano anche obj.__proto__. Per quei browser è possibile utilizzare obj.constructor.prototype. Tuttavia è un po 'pericoloso perché questa proprietà può essere ridefinita.

Problemi correlati