kann jemand diese Array.prototype.find () Polyfill erklären?

8

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?

    
M.J. Saedy 12.06.2014, 11:22
quelle

1 Antwort

10

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 erweitern Array.prototype ) also warum sollte die Länge numerisch sein und warum wird Object() 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 Wert this ein Array-Objekt ist. Daher kann es auf andere Arten von Objekten zur Verwendung als eine Methode übertragen werden. Ob die Funktion find 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:

%Vor%

Ein berühmteres Beispiel (ohne find ) verwendet slice um Array-artige Objekte in Arrays umzuwandeln:

%Vor%     
T.J. Crowder 12.06.2014, 11:24
quelle

Tags und Links