2010-06-21 14 views
16

¿Qué navegadores web usan el __proto__? Mozilla states que:JavaScript y __proto__: ¿qué navegadores lo usan?

Tenga en cuenta que __proto__ pueden no estar disponibles en versiones de JavaScript distinto de aquel en Mozilla.

+0

Puede adjuntar '__proto__' en los puntos atrás' \ '' para el formateo. –

+5

El formateo de StackOverflow solo apesta si no se toma el tiempo para entender cómo funciona. – deceze

+0

Sin tecla de retroceso en los teclados azerty FWIW –

Respuesta

8

Haga clic here por su respuesta.

detalles

La forma más general sería probar esta página en diferentes navegadores:

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

    </head> 
</html> 

Se avisa si un navegador compatible con __proto__. Lo he enviado al browsershots.org, que creará capturas de pantalla de la página en muchos navegadores diferentes. Por lo tanto, debería ver, mediante el mensaje de alerta, qué navegador lo admite.

+1

¡Gracias!En resumen, no funciona en IE, Safari <5 y Opera <10.50. – Tower

+7

El enlace ya no está activo. Alguien sabe sobre IE9? – Dave

+0

Acabo de probar esto en IE9 e IE10. No funciona en IE9, pero funciona en IE10. – kzh

3

El final de la frase que has publicado es See below for workarounds., donde hay una discusión sobre un método alternativo que utiliza 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 sé, pero quiero saber qué navegadores web admiten '__proto__'. Dependiendo de la respuesta, es posible que ni siquiera necesite ese tipo de funcionalidad. – Tower

+2

No entiendo por qué copiaría propiedades de un objeto a otro ... Esto frustra el propósito de la poderosa herencia prototípica incorporada en JS. – Marius

7

El Browser Security Handbook tiene una tabla que muestra qué exploradores exponer __proto__.

En la actualidad, los navegadores son:

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

Los excluidos:

  • IE 6, 7, 8
  • Opera
0

Esto no es una respuesta directa a la pregunta pero puede ayudar a aquellos que quieran conocer el prototipo de la instancia del objeto (esto es para lo que a menudo se usa __proto__). Todos los navegadores modernos (incluido IE9) admiten getPrototypeOf() que se pueden usar para determinar el prototipo del objeto. La ironía del destino es que algunos navegadores reales como IE7 e IE8 que no son compatibles con Object.getPrototypeOf(obj) tampoco son compatibles con obj.__proto__. Para esos navegadores, puede usar obj.constructor.prototype. Sin embargo, es un poco peligroso porque esta propiedad se puede redefinir.

Cuestiones relacionadas