Heim Web-Frontend js-Tutorial Javascript-Objektorientierte Kapselung und Vererbung_Javascript-Kenntnisse

Javascript-Objektorientierte Kapselung und Vererbung_Javascript-Kenntnisse

May 16, 2016 pm 04:30 PM
javascript 封装 继承 面向对象

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:

Code kopieren Der Code lautet wie folgt:

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:

Code kopieren Der Code lautet wie folgt:

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

Code kopieren Der Code lautet wie folgt:

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:

Code kopieren Der Code lautet wie folgt:

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.

Code kopieren Der Code lautet wie folgt:

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:

Code kopieren Der Code lautet wie folgt:

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:

Code kopieren Der Code lautet wie folgt:

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.

Erklärung dieser Website
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

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

Video Face Swap

Video Face Swap

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

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Detaillierte Erläuterung der C++-Funktionsvererbung: Wie werden „Basisklassenzeiger' und „abgeleitete Klassenzeiger' bei der Vererbung verwendet? Detaillierte Erläuterung der C++-Funktionsvererbung: Wie werden „Basisklassenzeiger' und „abgeleitete Klassenzeiger' bei der Vererbung verwendet? May 01, 2024 pm 10:27 PM

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.

TrendForce: Nvidias Blackwell-Plattformprodukte sorgen dafür, dass die CoWoS-Produktionskapazität von TSMC in diesem Jahr um 150 % steigt TrendForce: Nvidias Blackwell-Plattformprodukte sorgen dafür, dass die CoWoS-Produktionskapazität von TSMC in diesem Jahr um 150 % steigt Apr 17, 2024 pm 08:00 PM

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.

Offengelegte AMD „Strix Halo' FP11-Gehäusegröße: entspricht Intel LGA1700, 60 % größer als Phoenix Offengelegte AMD „Strix Halo' FP11-Gehäusegröße: entspricht Intel LGA1700, 60 % größer als Phoenix Jul 18, 2024 am 02:04 AM

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

Ausführliche Erklärung der C++-Funktionsvererbung: Wie kann man Fehler bei der Vererbung debuggen? Ausführliche Erklärung der C++-Funktionsvererbung: Wie kann man Fehler bei der Vererbung debuggen? May 02, 2024 am 09:54 AM

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.

Ausführliche Erklärung der C++-Funktionsvererbung: Wie versteht man die Beziehung „is-a' und „has-a' bei der Vererbung? Ausführliche Erklärung der C++-Funktionsvererbung: Wie versteht man die Beziehung „is-a' und „has-a' bei der Vererbung? May 02, 2024 am 08:18 AM

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

Entdecken Sie die objektorientierte Programmierung in Go Entdecken Sie die objektorientierte Programmierung in Go Apr 04, 2024 am 10:39 AM

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.

Wie wirken sich Vererbung und Polymorphismus auf die Klassenkopplung in C++ aus? Wie wirken sich Vererbung und Polymorphismus auf die Klassenkopplung in C++ aus? Jun 05, 2024 pm 02:33 PM

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.

Wie verbessern C++-Funktionen die Effizienz der GUI-Entwicklung durch Kapselung von Code? Wie verbessern C++-Funktionen die Effizienz der GUI-Entwicklung durch Kapselung von Code? Apr 25, 2024 pm 12:27 PM

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.

See all articles