Ich habe das folgende Polyfill am Anfang meines Projekts zu Array
hinzugefügt:
Das funktioniert in Chrome und Firefox einwandfrei, aber in Internet Explorer 11 wird diese Funktion tatsächlich in jedem Array
als -Schub gedrückt, und ich kann sogar darauf zugreifen:
Dies wirft alle Arten von Ausnahmen im IE mit Funktionen wie .forEach
, wo ich einige Daten erwarte und diese Funktion gefunden wird.
Hier ist ein Screenshot von den IE-Entwicklertools, in diesem Fall sollte dieses Array nur zwei Elemente anstelle von drei Elementen enthalten.
Und so sollte es sein, von Chrome. Tatsächlich glaube ich, dass sogar der tatsächliche Inhalt falsch ist, aber ich bin noch nicht dort angekommen (es sollte ein Array sein, das Arrays der Länge 2 enthält).
Wie kann sich JavaScript in IE11 immer noch so falsch verhalten, und wie kann ich diese Funktion korrekt zu prototype
hinzufügen anstatt in jeder Array
-Instanz?
Es wird nicht in jedes Array "geschoben"; Sie haben dem Prototypobjekt eine Eigenschaft hinzugefügt, sodass es in jeder Arrayinstanz sichtbar und aufzählbar ist. So sollen prototypische Eigenschaften funktionieren.
Es funktioniert in Chrome und Firefox, weil .find()
auf dem Prototyp in diesen Umgebungen so definiert ist, dass es sichtbar ist, aber nicht aufzählbar Object.defineProperty()
:
Zusätzlich zur Eigenschaft "value", die eindeutig der Wert der neuen Eigenschaft ist, werden die Eigenschaften "enumerable" und "configurable" standardmäßig auf false
gesetzt. Das bedeutet, dass "find" in keiner Situation angezeigt wird, in der die Objekteigenschaften durchlaufen werden.
Tags und Links javascript internet-explorer-11