Verwandte Empfehlungen: JavaScript-Tutorial
(Konzept) Die Prototypenkette bezieht sich auf eine verknüpfte Liste, die aus einigen Prototypen über __proto__-Zeiger besteht. Eine Prototypenkette kann Objekte bedienen, die Daten in der Prototypenkette teilen möchten, und wird verwendet um den JavaScript-Vererbungsmechanismus zu implementieren.
(Prototyp-Kettenzeiger) An der Prototypenkette beteiligte Zeiger:
Funktion A() { } sei a1 = neues A() sei a2 = neues A() sei a3 = neues A() // Diese Codezeilen generieren die unten gezeigte Prototypenkette
Sei A = { prüfen: "" } sei a1 = Object.create(A) sei a2 = Object.create(A) sei a3 = Object.create(A) // Diese Codezeilen entsprechen der unten gezeigten Prototypenkette
Funktion A() { } sei a1 = neues A() sei a2 = neues A() sei a3 = neues A() // Diese Codezeilen generieren die unten gezeigte Prototypenkette
Die Prototypenkette mit Vererbung kann mithilfe eines vereinfachten Diagramms analysiert werden
// Verwenden Sie den parasitären Kombinationsmodus, um die geerbte Funktion C() {} zu implementieren Funktion B() {} B.prototype = neues C() Funktion A() {} A.prototype = neues B() sei a1 = neues A() sei a2 = neues A() sei a3 = neues A()
der Prototypenkette Der Endpunkt der Prototypenkette ist null, was sich nicht auf ein Prototypenobjekt bezieht
.Die Dynamik des Prototyps wird ausführlich in „Objektorientierte Programmierung“ erläutert. Dabei geht es hauptsächlich um das Umschreiben und Modifizieren des Prototyps. Hier ein paar Beispiele.
Beispiel 1 – Prototyp-Dynamik
var A = function() {}; A.prototyp.n = 1; var b = neues A(); A.prototype = { n: 2, m: 3 } var c = neues A(); console.log(bn); // 1 console.log(bm); // undefiniert console.log(cn); // 2 console.log(cm); // 3
Beispiel 2 – Dynamik des Prototyps und der unteren Kette des Prototyps
var F = function() {}; Object.prototype.a = function() { console.log('a'); }; Function.prototype.b = function() { console.log('b'); } var f = neues F(); fa(); // a fb(); // Das b-Attribut existiert nicht Fa(); // a Fb(); //
bBeziehen Sie sich auf das erste Bild im oben erwähnten „Prototyp-Kettendiagramm ohne Vererbung“. Sie können das folgende vereinfachte Referenzdiagramm-Analyseproblem zeichnen.
Beispiel 3 – Prototypendynamik und untere Kettenfunktion des Prototyps
Person(name) { this.name = Name } sei p = new Person('Tom'); console.log(p.__proto__) // Person.prototype console.log(Person.__proto__) // Function.prototype
Beispiel 4 – Prototypdynamik und Prototypkette Untere Kette
var foo = {}, F = function(){}; Object.prototype.a = 'Wert a'; Function.prototype.b = 'Wert b'; Object.prototype = { a: „Wert a“ } Function.prototype = { b: „Wert b“ } console.log(foo.a); // Wert a console.log(foo.b); // undefiniert console.log(Fa); // Wert a console.log(Fb); // Wert b
bezieht sich auf das erste Bild im oben erwähnten „Prototyp-Kettendiagramm ohne Vererbung“, um das folgende vereinfachte Referenzdiagramm-Analyseproblem zu zeichnen. Da foo und F ihre Prototypen bei der Deklaration binden, erhalten sie die im Heapspeicher gespeicherte Adresse des Prototyps über den im Stapelspeicher gespeicherten Zeiger. Zuerst wird der Prototyp geändert, und F kann weiterhin über den Zeiger des Stapelspeichers auf das geänderte Ergebnis zugreifen. Der zweite Schritt besteht darin, den Prototyp neu zu schreiben. Nach dem Umschreiben des Prototyps wird zunächst ein neuer Speicherplatz im Heap-Speicher und dann ein neuer Speicherplatz im Stapelspeicher geöffnet um den Zeiger auf den Heap-Speicher zu speichern. Da sich die von foo und F gehaltenen Stapelspeicherzeiger von den neuen Stapelspeicherzeigern unterscheiden, können foo und F zu diesem Zeitpunkt nicht auf den neu geschriebenen Prototyp zugreifen.
Verwandte Empfehlungen:
Das obige ist eine detaillierte Erklärung der JavaScript-Prototypenkette mit Bildern und Texten. Weitere Informationen finden Sie in anderen verwandten Artikeln auf der chinesischen PHP-Website.