2010-06-21 9 views
16

Welche Webbrowser verwenden __proto__? Mozilla states das:JavaScript und __proto__ - welche Browser benutzen es?

Beachten Sie, dass __proto__ möglicherweise nicht in anderen JavaScript-Versionen als in Mozilla verfügbar sind.

+0

Sie könnten '' __proto__' in Backticks \ '' für die Formatierung einschließen. –

+5

Die Formatierung von StackOverflow ist nur dann ein Problem, wenn Sie sich nicht die Zeit nehmen, um zu verstehen, wie es funktioniert. – deceze

+0

Nein Backticks Schlüssel auf Azerty Tastaturen FWIW –

Antwort

8

Klicken Sie here für Ihre Antwort.

Einzelheiten

Die allgemeinste Art und Weise dieser Seite in verschiedenen Browsern zu testen wäre:

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

    </head> 
</html> 

Es alarmiert, wenn ein Browser __proto__ unterstützt. Ich habe es an browsershots.org gesendet, die Screenshots der Seite in vielen verschiedenen Browsern erstellen wird. Sie sollten also anhand der Warnmeldung sehen, welcher Browser dies unterstützt.

+1

Danke!Zusammenfassend funktioniert es nicht mit IE, Safari <5 und Opera <10.50. – Tower

+7

Der Link ist nicht mehr aktiv. Wer kennt den IE9? – Dave

+0

Ich habe das gerade in IE9 und IE10 getestet. Es funktioniert nicht in IE9, funktioniert aber in IE10. – kzh

3

Das Ende des Satzes Sie auf dem Laufenden ist See below for workarounds., wo es eine Diskussion über eine alternative Methode ist extends() die super.prototype verwendet:

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

Ich weiß, aber ich möchte wissen, welche Web-Browser '__proto__' unterstützen. Abhängig von der Antwort brauche ich vielleicht nicht einmal diese Art von Funktionalität. – Tower

+2

Ich verstehe nicht, warum Sie Eigenschaften von einem Objekt in ein anderes kopieren würden ... Dies verhindert den Zweck der leistungsfähigen prototypischen Vererbung in JS gebaut. – Marius

7

Die Browser Security Handbook ihr eine Tabelle hat, die __proto__ Browser aus.

Derzeit diese Browser sind:

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

Diejenigen ausgeschlossen:

  • IE 6, 7, 8
  • Opera
0

Dies ist keine direkte Antwort auf die Frage, aber es kann für diejenigen hilfreich sein, die den Prototyp der Objektinstanz wissen wollen (dafür wird oft __proto__ verwendet). Alle modernen Browser (einschließlich IE9) unterstützen getPrototypeOf(), mit denen der Prototyp des Objekts ermittelt werden kann. Die Ironie des Schicksals ist, dass einige noch aktuelle Browser wie IE7 und IE8, die Object.getPrototypeOf(obj) nicht unterstützen, obj.__proto__ ebenfalls nicht unterstützen. Für diese Browser können Sie obj.constructor.prototype verwenden. Es ist jedoch ein bisschen gefährlich, da diese Eigenschaft neu definiert werden kann.

Verwandte Themen