Lassen Sie uns die Kapselung und Vererbung in JS-objektorientiertem JS-Objekt aussortieren.
1. Verpackung
Es gibt viele Implementierungsmethoden zur Kapselung in JS, und hier sind einige häufig verwendete.
1.1 Original -Mustererzeugungsobjekt
Schreiben Sie unsere Mitglieder direkt in das Objekt und geben Sie sie mit einer Funktion zurück. Nachteile: Es ist schwer zu erkennen, dass es ein Beispiel für ein Muster ist.
Code:
Die Codekopie lautet wie folgt:
Funktion Stu (Name, Punktzahl) {
zurückkehren {
Name: Name,
Punktzahl: Punktzahl
}
}
var stu1 = stu ("Zhang san", 80);
var stu2 = stu ("li si", 90);
console.log (stu1.name); // Zhang San
1.2 Erzeugen Sie konstruierte Musterobjekte
JS hilft uns, ein Muster zum Erzeugen von Objekten mithilfe von Konstruktoren bereitzustellen. Der sogenannte "Konstruktor" ist tatsächlich eine gewöhnliche Funktion, diese Variable wird jedoch intern verwendet. Wenn das neue Schlüsselwort verwendet wird, um eine Instanz des Konstruktors zu generieren, wird diese Variable an das Instanzobjekt gebunden.
Laden Sie den Code direkt hoch:
Die Codekopie lautet wie folgt:
Funktion Stu (Name, Punktzahl) {
this.name = name,
this.score = Score
}
var stu1 = new stu ("zhang san", 80);
var stu2 = new stu ("li si", 90);
console.log (stu1.name + "/" + stu2.score); // Zhang SAN90
console.log ((stu1.constructor == stu) + "/" + (stu2.constructor == stu)); // wahr wahr
console.log ((stu1 Instance von stu) + "/" + (stu2 Instance von stu)); // wahr wahr
Es ist nicht schwer zu erkennen, dass der JS -Konstruktor Objekte generiert und C# mit der Klasse erzeugt Objekte. Beide verwenden Vorlagen, um Objektmitglieder zu definieren, die sie durch neue Schlüsselwörter instanziieren.
Generieren Sie das gleiche STU -Objekt mit C# Code
Die Codekopie lautet wie folgt:
Klasse Stu
{
öffentlicher String -Name;
öffentliche Doppelpunktzahl;
}
OK, hier ist das grundlegende Objekt. Jetzt brauchen wir also eine Methode, bei der alle Objekte üblich sind, und wir haben diese Methode nur einmal erstellt. (Erstellen Sie nicht wiederholt mit dem neuen Objekt) Was soll ich tun? Jeder weiß, dass wir in C# statische Mitglieder verwenden können. Wie mache ich es in JS?
1.3 Prototypmodus
In JS hat jeder Konstruktor ein Prototypattribut, und alle Eigenschaften und Methoden dieses Objekts werden von der Konstruktorinstanz vererbt. Das Hinzufügen von Mitgliedern zum Prototypen direkt entspricht der Deklaration eines statischen Mitglieds in C#.
Code:
Die Codekopie lautet wie folgt:
Funktion Stu (Name, Punktzahl) {
this.name = name,
this.score = Score
}
Stu.prototype.type = 'Student';
Stu.prototype.log = Funktion (s) {
console.log (s);
}
var stu1 = new stu ("zhang san", 80);
var stu2 = new stu ("li si", 90);
console.log (stu1.type + "/" + stu2.type); // Studenten
stu1.log ('Hallo'); // Hallo
console.log (stu1.log == stu2.log); // WAHR
Hier geht es um die Kapselung. Schauen wir uns an, wie die Erbschaft in JS implementiert wird?
2. Vererbung
2.1 Konstruktorenbindung
Rufen Sie Methoden direkt in der untergeordneten Funktion an, um den Konstruktor des übergeordneten Objekts an das untergeordnete Objekt zu binden.
Die Codekopie lautet wie folgt:
Funktion Stu (Name, Punktzahl) {
Grade.Apply (this, argumente);
//Grade.call(This, Argumente);
this.name = name,
this.score = Score
}
Funktionsgrad () {
this.code = "Junior High School";
this.ask = function () {
console.log ("Hallo allerseits");
}
}
var stu1 = new stu ("zhang san", 80);
var stu2 = new stu ("li si", 90);
console.log (stu1.code); // Junior High School
stu1.ask (); // Hallo zusammen
Bewerben Sie hier zwei Dinge, geben Sie den ersten Parameter an den Note -Konstruktor (Anrufer) und führen Sie den Code in Note aus. Es ist gleichbedeutend mit der Ausführung der in der Klasse definierten Mitglieder, die damit in Stu wieder definiert sind.
2.2 Vererbung durch Prototyp
Schauen Sie sich zuerst den Code an
Code:
Die Codekopie lautet wie folgt:
Funktion Stu (Name, Punktzahl) {
this.name = name,
this.score = Score
}
Funktionsgrad () {
this.code = "Junior High School";
}
Stu.Prototype = new grade ();
Stu.Prototype.Constructor = stu; // Eine Erbschaftskettenstörung verhindern und die Erklärung manuell zurücksetzen
var stu1 = new stu ("zhang san", 80);
var stu2 = new stu ("li si", 90);
console.log (stu.prototype.Constructor); // Besitzer Konstruktor
console.log (stu1.code); // Junior High School
Wie bereits erwähnt, entspricht der Prototyp statischer Mitglieder in C#. Daher verwandeln wir alle Mitglieder der Elternklasse in ihre eigenen statischen Mitglieder, um die Vererbung zu erreichen.
Es gibt einen Nachteil des Erbens durch Prototypen: Alle erblichen Mitglieder sind statisch. Wie können Sie also Objektmitglieder erben?
2.3 Erbschaft kopieren
Kopieren Sie alle Eigenschaften und Methoden des übergeordneten Objekts in das untergeordnete Objekt, um die Vererbung zu realisieren.
Code:
Die Codekopie lautet wie folgt:
Funktion Stu (Name, Punktzahl) {
this.name = name,
this.score = Score
}
function grade () {}
Grade.prototype.code = "Junior High School";
}
// Funktionskapselung
Funktion erweitert (c, p) {
var p = P.Prototyp;
var c = c.prototyp;
für (var i in p) {
c [i] = p [i];
}
}
erweitern (stu, grade);
var stu1 = new stu ("zhang san", 80);
var stu2 = new stu ("li si", 90);
stu1.code = 'High School';
console.log (stu1.code); // High School
console.log (stu2.code); // Junior High School
console.log (stu.prototype.Constructor);
console.log (grade.prototype.constructor)
Das habe ich über die objektorientierte JS-Organisation geschrieben. Dieses Ding ist nicht statisch. Nehmen Sie bei der Verwendung Änderungen entsprechend Ihren Anforderungen vor. Es gibt ein Sprichwort, das sehr gut verläuft, das Richtige ist das Beste.
Dies wird nur für die Kapselung und Vererbung analysiert. Wir werden in Zukunft einige andere Artikel machen, damit Freunde ein tieferes Verständnis der javaScript-objektorientierten Programmierung haben. Natürlich ist es alles persönliches Verständnis. Wenn es Auslassungen gibt, kontaktieren Sie mich bitte.