Eine Reihe wichtiger Fragen im Zusammenhang mit Arrays __proto__ und Prototyp?

Sicherung :

Wir verwenden diese Codezeile, wenn wir die Argumente Array-artig in Array-artig umwandeln:

var arg = Array.prototype.slice.call(Argumente)

Warum also Array.prototype.slice.call, nicht Array.slice.call

Sie befinden sich alle auf einer Prototyp-Kette, sollte es nicht möglich sein, Aufrufe automatisch von unten nach oben zu finden? // naive Idee

Falsch, nicht auf einer Prototypkette

Die Theorie ist folgende: Ich kann die Methode zum Aufrufen von Array nicht finden und gehe dann zu Array.__proto__ statt zu Array.prototype

Und:

Array.__proto__ === Array.prototype
//false

Dann lassen Sie mich darüber nachdenken, was Array.__proto__ ist? ist Object.prototype?

Array.__proto__===Object.prototype
//false,也不对

Array ist ein Konstruktor, dann ist es eine Instanz von Function, es sollte so aussehen:

Array.__proto__ === Function.prototype
//true

zurück zur Ausgangsfrage

Auf diese Weise können wir verstehen, warum Array.slice.call nicht verwendet werden kann, denn obwohl Array ein Konstruktor ist, ist es auch ein Funktionsobjekt. Es gibt _ proto__, und Slice kann nicht in Array gefunden werden. Natürlich gibt es kein eins in _ proto__ von Array. .

Das Slice befindet sich in Array.prototype.

zwei wichtige Punkte

1. Wenn Sie das Attribut nicht finden können, gehen Sie zu __proto__, um es zu finden, nicht zu .prototype.

2. Konstruktoren sind auch Funktionsobjekte, vergessen Sie nicht, dass sie Instanzen von Function sind.

3. Nur Konstrukteure haben Prototypen.

Supongo que te gusta

Origin blog.csdn.net/qq_42533666/article/details/129115235
Recomendado
Clasificación