


Javascript-Objektorientierte Kapselung und Vererbung_Javascript-Kenntnisse
Lassen Sie uns die Kapselung und Vererbung in js objektorientiert klären.
1. Kapselung
Es gibt viele Möglichkeiten, die Kapselung in js zu implementieren. Hier sind einige häufig verwendete.
1.1 Originalmodus-Generierungsobjekt
Schreiben Sie unsere Mitglieder direkt in das Objekt und geben Sie sie mit der Funktion zurück. Nachteile: Es ist schwierig, eine Instanz eines Musters zu erkennen.
Code:
Funktion Stu(Name, Punktzahl) {
zurück {
Name: Name,
Punktzahl: Punktzahl
}
}
var stu1 = Stu("张三", 80);
var stu2 = Stu("李思", 90);
console.log(stu1.name); // Zhang San
1.2 Konstruktionsmusterobjekte generieren
JS bietet uns ein Muster für die Verwendung von Konstruktoren zum Generieren von Objekten. Der sogenannte „Konstruktor“ ist eigentlich eine gewöhnliche Funktion, aber diese Variable wird intern verwendet. Wenn das Schlüsselwort new zum Generieren einer Instanz des Konstruktors verwendet wird, wird die Variable this an das Instanzobjekt gebunden.
Geben Sie den Code direkt ein:
Funktion Stu(Name, Punktzahl) {
This.name = Name,
This.score = Punktzahl
}
var stu1 = new Stu("张三", 80);
var stu2 = new Stu("李思", 90);
console.log(stu1.name "/" stu2.score); // Zhang San 90
console.log((stu1.constructor == Stu) "/" (stu2.constructor == Stu)); // true true
console.log((stu1 Instanz von Stu) "/" (stu2 Instanz von Stu)); // true true
Es ist nicht schwer zu erkennen, dass das vom js-Konstruktor generierte Objekt genau das gleiche ist wie das von der Klasse in C# generierte Objekt. Beide verwenden Vorlagen, um Objektmitglieder zu definieren und sie über das neue Schlüsselwort zu instanziieren.
Generieren Sie dasselbe Stu-Objekt mit C#-Code
Klasse Stu
{
öffentlicher String-Name;
öffentliche Doppelpartitur;
}
OK, jetzt haben wir die Grundobjekte. Jetzt brauchen wir also eine Methode, die allen Objekten gemeinsam ist und die es nur erlaubt, diese Methode einmal zu erstellen. (Nicht wiederholt mit Objekt neu erstellt) Was soll ich tun? Jeder weiß, dass wir in C# statische Member verwenden können. Wie macht man das also in js?
1.3 Prototypmodus
In js hat jeder Konstruktor ein Prototypattribut. Alle Eigenschaften und Methoden dieses Objekts werden von der Instanz des Konstruktors geerbt. Das direkte Hinzufügen von Mitgliedern zum Prototyp entspricht dann der Deklaration statischer Mitglieder in C#.
Code:
Funktion Stu(Name, Punktzahl) {
This.name = Name,
This.score = Punktzahl
}
Stu.prototype.type='Student';
Stu.prototype.log = Funktion(en) {
console.log(s);
}
var stu1 = new Stu("张三", 80);
var stu2 = new Stu("李思", 90);
console.log(stu1.type "/" stu2.type); // Student Student
stu1.log('hello'); // hallo
console.log(stu1.log == stu2.log); // true
Das war's mit der Kapselung. Schauen wir uns an, wie die Vererbung in js implementiert wird.
2. Vererbung
2.1 Konstruktorbindung
Rufen Sie direkt die Methode „call“ oder „apply“ in der untergeordneten Funktion auf, um den Konstruktor des übergeordneten Objekts an das untergeordnete Objekt zu binden.
Funktion Stu(Name, Punktzahl) {
Grade.apply(this, arguments);
//Grade.call(this, arguments);
This.name = Name,
This.score = Punktzahl
}
Funktion Grade() {
This.code = "Junior High School";
This.ask = function () {
console.log("Hallo zusammen");
}
}
var stu1 = new Stu("张三", 80);
var stu2 = new Stu("李思", 90);
console.log(stu1.code); // Junior High School
stu1.ask(); // Hallo zusammen
Die Anwendung hier führt zwei Dinge aus: Sie übergibt den ersten Parameter this an den Grade-Konstruktor (Aufrufer) und führt dann den Code in Grade aus. Dies entspricht der erneuten Ausführung der damit in Grade definierten Elemente in Stu.
2.2 Vererbung durch Prototyp
Sehen Sie sich zuerst den Code an
Code:
Funktion Stu(Name, Punktzahl) {
This.name = Name,
This.score = Punktzahl
}
Funktion Grade() {
This.code = "Junior High School";
}
Stu.prototype = new Grade();
Stu.prototype.constructor = Stu; //Vererbungskettenstörung verhindern und die Anweisung manuell zurücksetzen
var stu1 = new Stu("张三", 80);
var stu2 = new Stu("李思", 90);
console.log(Stu.prototype.constructor); // Eigener Konstruktor
console.log(stu1.code); // Junior High School
Wie bereits erwähnt, entspricht der Prototyp einem statischen Mitglied in C#, daher wandeln wir alle Mitglieder der übergeordneten Klasse in unsere eigenen statischen Mitglieder um, um eine Vererbung zu erreichen.
Die Vererbung durch Prototypen hat einen Nachteil: Alle geerbten Mitglieder sind statisch. Wie erbt man also Objektmitglieder?
2.3 Vererbung kopieren
Kopieren Sie alle Eigenschaften und Methoden des übergeordneten Objekts in das untergeordnete Objekt, um eine Vererbung zu erreichen.
Code:
Funktion Stu(Name, Punktzahl) {
This.name = Name,
This.score = Punktzahl
}
Funktion Grade() {}
Grade.prototype.code = "Junior High School";
}
//Funktionskapselung
Funktion verlängern(C, P) {
var p = P.prototype;
var c = C.prototype;
für (var i in p) {
c[i] = p[i];
}
}
verlängern(Stu, Note);
var stu1 = new Stu("张三", 80);
var stu2 = new Stu("李思", 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 ist alles für die objektorientierte Organisation von js. Dieses Ding ist nicht statisch. Sie können bei der Verwendung Änderungen entsprechend Ihren eigenen Bedürfnissen vornehmen. Es gibt ein Sprichwort, das sehr gut ist, das Richtige ist das Beste.
Hier analysieren wir nur Kapselung und Vererbung. Wir werden in Zukunft einige weitere Artikel verfassen, um Ihnen ein tieferes Verständnis der objektorientierten JavaScript-Programmierung zu vermitteln. Natürlich handelt es sich hierbei um persönliche Absprachen. Sollten Sie Auslassungen feststellen, nehmen Sie bitte Kontakt mit mir auf.

Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

Video Face Swap
Tauschen Sie Gesichter in jedem Video mühelos mit unserem völlig kostenlosen KI-Gesichtstausch-Tool aus!

Heißer Artikel

Heiße Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen



Verwenden Sie bei der Funktionsvererbung „Basisklassenzeiger“ und „abgeleitete Klassenzeiger“, um den Vererbungsmechanismus zu verstehen: Wenn der Basisklassenzeiger auf das abgeleitete Klassenobjekt zeigt, wird eine Aufwärtstransformation durchgeführt und nur auf die Mitglieder der Basisklasse zugegriffen. Wenn ein abgeleiteter Klassenzeiger auf ein Basisklassenobjekt zeigt, wird eine Abwärtsumwandlung durchgeführt (unsicher) und muss mit Vorsicht verwendet werden.

Laut Nachrichten dieser Website vom 17. April hat TrendForce kürzlich einen Bericht veröffentlicht, in dem es davon ausgeht, dass die Nachfrage nach den neuen Blackwell-Plattformprodukten von Nvidia optimistisch ist und die gesamte CoWoS-Verpackungsproduktionskapazität von TSMC im Jahr 2024 voraussichtlich um mehr als 150 % steigen wird. Zu den neuen Blackwell-Plattformprodukten von NVIDIA gehören GPUs der B-Serie und GB200-Beschleunigerkarten, die NVIDIAs eigene GraceArm-CPU integrieren. TrendForce bestätigt, dass die Lieferkette derzeit sehr optimistisch in Bezug auf GB200 ist. Es wird geschätzt, dass die Auslieferungen im Jahr 2025 eine Million Einheiten überschreiten werden, was 40-50 % der High-End-GPUs von Nvidia ausmacht. Nvidia plant, in der zweiten Jahreshälfte Produkte wie GB200 und B100 auszuliefern, aber vorgelagerte Waferverpackungen müssen noch komplexere Produkte einführen.

Diese Website berichtete am 9. Juli, dass die Prozessoren der AMD Zen5-Architektur „Strix“ über zwei Verpackungslösungen verfügen werden: Der kleinere StrixPoint wird das FP8-Paket verwenden, während der StrixHalo das FP11-Paket verwenden wird. Quelle: videocardz source @Olrak29_ Die neueste Enthüllung ist, dass die FP11-Gehäusegröße von StrixHalo 37,5 mm * 45 mm (1687 Quadratmillimeter) beträgt, was der LGA-1700-Gehäusegröße der AlderLake- und RaptorLake-CPUs von Intel entspricht. AMDs neueste Phoenix APU verwendet eine FP8-Gehäuselösung mit einer Größe von 25*40 mm, was bedeutet, dass StrixHalos F

Tipps zum Debuggen von Vererbungsfehlern: Stellen Sie sicher, dass die Vererbungsbeziehungen korrekt sind. Verwenden Sie den Debugger, um den Code schrittweise durchzugehen und Variablenwerte zu untersuchen. Stellen Sie sicher, dass Sie den virtuellen Modifikator richtig verwenden. Untersuchen Sie das Problem der Vererbungsdiamanten, das durch versteckte Vererbung verursacht wird. Suchen Sie nach nicht implementierten rein virtuellen Funktionen in abstrakten Klassen.

Detaillierte Erläuterung der C++-Funktionsvererbung: Beherrschen Sie die Beziehung zwischen „is-a“ und „has-a“ Was ist Funktionsvererbung? Funktionsvererbung ist eine Technik in C++, die in einer abgeleiteten Klasse definierte Methoden mit in einer Basisklasse definierten Methoden verknüpft. Es ermöglicht abgeleiteten Klassen, auf Methoden der Basisklasse zuzugreifen und diese zu überschreiben, wodurch die Funktionalität der Basisklasse erweitert wird. „Ist-ein“- und „Hat-ein“-Beziehungen Bei der Funktionsvererbung bedeutet die „Ist-ein“-Beziehung, dass die abgeleitete Klasse ein Untertyp der Basisklasse ist, d. h. die abgeleitete Klasse „erbt“ die Merkmale und das Verhalten von die Basisklasse. Die „has-a“-Beziehung bedeutet, dass die abgeleitete Klasse einen Verweis oder Zeiger auf das Basisklassenobjekt enthält, d. h. die abgeleitete Klasse „besitzt“ das Basisklassenobjekt. SyntaxDas Folgende ist die Syntax für die Implementierung der Funktionsvererbung: classDerivedClass:pu

Die Go-Sprache unterstützt die objektorientierte Programmierung durch Typdefinition und Methodenzuordnung. Es unterstützt keine traditionelle Vererbung, sondern wird durch Komposition implementiert. Schnittstellen sorgen für Konsistenz zwischen Typen und ermöglichen die Definition abstrakter Methoden. Praxisbeispiele zeigen, wie OOP zum Verwalten von Kundeninformationen verwendet wird, einschließlich Vorgängen zum Erstellen, Abrufen, Aktualisieren und Löschen von Kunden.

Vererbung und Polymorphismus wirken sich auf die Kopplung von Klassen aus: Vererbung erhöht die Kopplung, da die abgeleitete Klasse von der Basisklasse abhängt. Polymorphismus reduziert die Kopplung, da Objekte über virtuelle Funktionen und Basisklassenzeiger konsistent auf Nachrichten reagieren können. Zu den Best Practices gehören der sparsame Umgang mit der Vererbung, die Definition öffentlicher Schnittstellen, das Vermeiden des Hinzufügens von Datenelementen zu Basisklassen und die Entkopplung von Klassen durch Abhängigkeitsinjektion. Ein praktisches Beispiel, das zeigt, wie Polymorphismus und Abhängigkeitsinjektion verwendet werden, um die Kopplung in einer Bankkontoanwendung zu reduzieren.

Durch die Kapselung von Code können C++-Funktionen die Effizienz der GUI-Entwicklung verbessern: Code-Kapselung: Funktionen gruppieren Code in unabhängige Einheiten, wodurch der Code leichter zu verstehen und zu warten ist. Wiederverwendbarkeit: Funktionen schaffen gemeinsame Funktionalität, die anwendungsübergreifend wiederverwendet werden kann, wodurch Duplikate und Fehler reduziert werden. Prägnanter Code: Der gekapselte Code macht die Hauptlogik prägnant und einfach zu lesen und zu debuggen.
