auf dieser MDN-Seite [ Ссылка Es gibt dieses Polyfill:
%Vor%meine Frage ist, was sind diese Zeilen für:
%Vor% da this
definitiv ein Array ist (wir erweitern Array.prototype), also stellen Sie sicher, dass length
numerisch ist, und warum wird Object () verwendet?
Die grundlegende Antwort ist, dass das Polyfill nur Schritt 1 und Schritt 4 des Algorithmus in der ES6-Entwurfsspezifikation (§22.1.3.8 ab dem 22. Mai-Entwurf) treu implementiert.
1. Sei O das Ergebnis des Aufrufs von ToObject, wobei der Wert this als Argument übergeben wird.
...
4. Lassen Sie len ToLength ( lenValue ) sein.
(Wo ToLength im Grunde eine Umwandlung in eine Zahl ist.)
Und es ist heutzutage möglich, Nicht-Objekt-Werte für this
zu verwenden (über Function#call
und Function#apply
oder indem Sie die Funktion direkt im strikten Modus aufrufen), Schritt 1 ist sinnvoll.
da
this
definitiv ein Array ist (wir erweiternArray.prototype
) also warum sollte die Länge numerisch sein und warum wirdObject()
verwendet?
Aber wir nicht wissen, dass this
ein Array ist. Beachten Sie diesen Hinweis in der aktuellen ES6-Entwurfsspezifikation:
Die Funktion
find
ist absichtlich generisch. Es ist nicht erforderlich, dass der Wertthis
ein Array-Objekt ist. Daher kann es auf andere Arten von Objekten zur Verwendung als eine Methode übertragen werden. Ob die Funktionfind
erfolgreich auf ein exotisches Objekt angewendet werden kann, das kein Array ist, hängt von der Implementierung ab.
Sie finden diese Notiz zu fast allen vordefinierten Funktionen, die Prototypen zugewiesen sind.
Sie können sie beispielsweise für andere Dinge verwenden, indem Sie sie direkt Objekten oder anderen Prototypen zuweisen:
%Vor% ... oder über Function#call
oder Function#apply
.
Angenommen, ich wollte Array#find
für ein Objekt arguments
verwenden. arguments
ist natürlich array-like , aber kein Array. Also könnte ich das tun:
Ein berühmteres Beispiel (ohne find
) verwendet slice
um Array-artige Objekte in Arrays umzuwandeln:
Tags und Links javascript arrays