Heim  >  Artikel  >  Web-Frontend  >  Detaillierte Erklärung von __proto__ und Prototyp in Javascript_Grundkenntnisse

Detaillierte Erklärung von __proto__ und Prototyp in Javascript_Grundkenntnisse

WBOY
WBOYOriginal
2016-05-16 16:30:291247Durchsuche

__proto__ ist der interne Prototyp, Prototyp ist der Konstruktor-Prototyp (der Konstruktor ist eigentlich eine Funktion)

Der Prototyp des Konstruktors ist ein Objekt

Was ist also ein Konstruktor?
Wenn Sie ein Objekt erstellen möchten, müssen Sie zunächst einen Objektkonstruktor haben, genau wie in PHP. Wenn Sie ein Objekt erstellen möchten, müssen Sie zunächst eine Klasse
haben Die Essenz eines Konstruktors ist eine Funktion. Die folgende Frage lautet: Wie erstelle ich ein Objekt mit diesem Konstruktor?
Antwort: neu

Der Konstruktor erstellt ein Objekt.
1. Das __proto__ aller Konstruktoren/Funktionen zeigt auf Function.prototype, eine leere Funktion (leere Funktion)

Code kopieren Der Code lautet wie folgt:

Number.__proto__ === Function.prototype
// wahr
Boolean.__proto__ === Function.prototype
// wahr
String.__proto__ === Function.prototype
// wahr
Object.__proto__ === Function.prototype
// wahr
Function.__proto__ === Function.prototype
// wahr
Array.__proto__ ===
Function.prototype
// wahr
RegExp.__proto__ === Function.prototype
// wahr
Fehler.__proto__ ===
Function.prototype
// wahr
Datum.__proto__ ===
Function.prototype
// wahr

erklärt, dass Number usw. alle Konstruktoren sind und diese Konstruktoren tatsächlich ein Objekt der Funktion sind. Mit anderen Worten, es entspricht var Number = new Function();

Es gibt insgesamt 12 integrierte Konstruktoren/Objekte in JavaScript (JSON wurde in ES5 neu hinzugefügt). Hier sind 8 zugängliche Konstruktoren. Auf den Rest wie Global kann nicht direkt zugegriffen werden. Argumente werden nur von der JS-Engine erstellt, wenn die Funktion aufgerufen wird. Mathematik und JSON liegen in Form von Objekten vor, es sind keine neuen erforderlich. Ihr __proto__ ist Object.prototype. Wie folgt

Code kopieren Der Code lautet wie folgt:

Math.__proto__ === Object.prototype
// wahr
JSON.__proto__ === Object.prototype
// wahr

Zu den oben genannten „alle Konstruktoren/Funktionen“ gehören sicherlich auch benutzerdefinierte Konstruktoren/Funktionen. Wie folgt

Code kopieren Der Code lautet wie folgt:

// Funktionsdeklaration
Funktion Person()
{}
// Funktionsausdruck
var Mann
=
Funktion()
{}
console.log(Person.__proto__ === Function.prototype)
// wahr
console.log(Man.__proto__ ===
Function.prototype)
// wahr

Was bedeutet das?

Alle Konstruktoren stammen von Function.prototype, sogar der Root-Konstruktor Object und Function selbst. Alle Konstruktoren erben die Eigenschaften und Methoden von Function.prototype. Wie Länge, Aufruf, Anwenden, Binden (ES5).

Function.prototype ist auch der einzige Prototyp, dessen Typ von XXX.prototype „Funktion“ ist. Der Prototyp anderer Konstrukteure ist ein Objekt. Wie folgt

Code kopieren Der Code lautet wie folgt:

console.log(typeof Function.prototype)
// Funktion
console.log(typeof Object.prototype)
// Objekt
console.log(typeof Number.prototype)
// Objekt
console.log(typeof Boolean.prototype)
// Objekt
console.log(typeof String.prototype)
// Objekt
console.log(typeof Array.prototype)
// Objekt
console.log(typeof RegExp.prototype)
// Objekt
console.log(typeof Error.prototype)
// Objekt
console.log(typeof Date.prototype)
// Objekt
console.log(typeof Object.prototype)
// Objekt

Oh, oben wurde auch erwähnt, dass es sich um eine leere Funktion handelt. Werfen wir einen Blick auf Alert(Function.prototype).

Wir wissen, dass der __proto__ aller Konstruktoren (einschließlich integrierter und benutzerdefinierter) Function.prototype ist. Wer ist also der __proto__ von Function.prototype?

Ich glaube, Sie haben alle gehört, dass Funktionen in JavaScript ebenfalls erstklassige Bürger sind. Wie können Sie das also zeigen? Wie folgt

Code kopieren Der Code lautet wie folgt:

console.log(Function.prototype.__proto__ ===
Object.prototype)
// wahr

Dies zeigt, dass alle Konstruktoren auch gewöhnliche JS-Objekte sind und dem Konstruktor Attribute hinzugefügt/entfernt werden können. Gleichzeitig erbt es auch alle Methoden von Object.prototype: toString, valueOf, hasOwnProperty usw.

Wer ist der __proto__ von Object.prototype?

Code kopieren Der Code lautet wie folgt:

Object.prototype.__proto__ ===
null //
wahr

Es hat die Spitze erreicht und ist null.

Verstehen Sie den Unterschied zwischen __proto__ und Prototyp in Javascript? Wenn Sie Fragen haben, hinterlassen Sie bitte eine Nachricht und lassen Sie uns gemeinsam darüber diskutieren

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn