Analyse der Kapselung in der objektorientierten JS-Programmierung
Dieser Artikel stellt Ihnen die Analyse der Kapselung in der objektorientierten JS-Programmierung vor. Er hat einen gewissen Referenzwert. Ich hoffe, er wird für Sie hilfreich sein.
Die uns bekannten objektorientierten Sprachen wie C++ und Java haben alle das Konzept von Klassen. Beispielsweise stellt Student
den Typ des Schülers dar und stellt keinen bestimmten Schüler dar, und die Instanz ist ein bestimmtes Objekt, das auf diesem Typ basiert, z. B. zhangsan
, lisi
Das von der Klasse generierte Objekt verkörpert den Prozess der abstrakten Vorlage zur Konkretheit namens klassenbasierte objektorientierte Methode , während JavaScript nicht über das Konzept einer Klasse verfügt, ist die objektorientierte Methode, die auf dem Prototyp basiert (obwohl Es6 class
hinzugefügt hat). , was im Wesentlichen eine Kapselung der Prototyp-Methode ist). Zusammenfassend sind die folgenden zwei Punkte:
Beim klassenbasierten objektorientierten Ansatz werden Objekte durch Klassen generiert.
Beim prototypbasierten objektorientierten Ansatz werden Objekte mithilfe von Konstruktoren und Prototypen konstruiert.
Das erste Merkmal der objektorientierten Sprache ist zweifellos die Kapselung. In JS besteht der Prozess der Kapselung darin, einige Eigenschaften und Methoden in Objekte zu „verpacken“. Methoden oder wie man Objekte erstellt (im Folgenden werden wir über die Erstellung von Objekten sprechen)? Das Folgende wird Schritt für Schritt erklärt:
Objektliteral--> Prototyp-Konstruktor--> 🎜>
ObjektliteralEs gibt zwei einfache Möglichkeiten, Objekte in JS zu erstellen:
- Objektliteral
-
var person = { name: "leon", age: "20", greeting: function() { alert('Hi!'); } }
Nach dem Login kopieren
- Attributmethoden zu
- Instanzen hinzufügen
Object
var person = new Object(); person.name = "leon"; person.age = "20"; person.greeting = function() { alert('Hi!'); };
Nach dem Login kopieren
- Vorteile: Einfacher Code
- Nachteile: Durch das Erstellen mehrerer Objekte wird viel Code generiert, der mühsam zu schreiben ist, und es gibt kein Konzept für Instanzen und Prototypen.
- Lösung: Werksmodus.
- Factory-Muster
Factory-Muster ist ein bekanntes Entwurfsmuster im Programmierbereich, das den Prozess der Erstellung spezifischer Objekte abstrahiert. Erstellen Sie eine Funktion in JS und fügen Sie den Prozess zum Erstellen neuer Objekte, zum Hinzufügen von Objektattributen und zum Zurückgeben von Objekten in diese Funktion ein. Benutzer müssen nur die Funktion aufrufen, um Objekte zu generieren, ohne auf die Details der Objekterstellung zu achten Muster:
function createPerson(name, age) { var person = new Object(); person.name = name; person.age = age; person.greeting = function() { alert('Hi!'); }; } var person1 = createPerson("leon", "20");
- Vorteile: Das Fabrikmuster löst das Problem der Duplizierung von Objektcode, der durch Objektliterale erstellt wird, und dieselbe API kann zum Erstellen ähnlicher Objekte verwendet werden.
- Nachteil: Da das Objekt durch den Aufruf einer Funktion erstellt wird, kann der Typ des Objekts nicht identifiziert werden.
- Lösung: Konstruktor
- Konstruktor
Der einzige Unterschied zwischen dem Konstruktor und anderen Funktionen in JS besteht darin, wie er funktioniert heißt, ist anders. Jede Funktion kann als Konstruktor verwendet werden, solange sie über den Operator
aufgerufen wird. Schauen Sie sich das folgende Beispiel an:function Person(name, age) { this.name = name; this.age = age; this.greeting = function() { alert('Hi!'); }; // return this; } var person1 = new Person("leon", "20"); var person2 = new Person("jack", "21");
new
Eine Instanz durchläuft vier Schritte durch den Konstruktor: new
- Erstellen Sie ein neues Objekt; 🎜>
- Binden Sie das
im Konstruktor an das neue Objekt
Fügen Sie Eigenschaften und Methoden zum neuen Objekt hinzu; > Gibt ein neues Objekt zurück (die JS-Engine fügt standardmäßig
this
hinzu).-
Die über den Konstruktor erstellten Objekte verfügen über ein
-Attribut, das einen Zeiger auf den Konstruktor selbst darstellt, sodass der Typ des Objekts erkannt werden kann. : - Aber es gibt immer noch ein Problem:
alert(person1.greeting == person2.greeting) //false
Nach dem Login kopierenreturn this;
ist im selben Konstruktor definiert, aber Funktionen mit demselben Namen auf verschiedenen Instanzen sind nicht gleich, was bedeutet, dass die beiden dasselbe haben Name Der Speicherplatz der Funktion ist inkonsistent, das heißt, die Methode im Konstruktor muss bei jeder Instanz neu erstellt werden. Dies ist offensichtlich nicht kosteneffektiv.
alert(person1.constructor === Person) //true alert(person1 instanceof Person) // true
Vorteile: Löst das Problem der Erstellung ähnlicher Objekte und kann Objekttypen erkennen. constructor
greeting()
- Lösung: Prototypenmodus.
- Prototypmuster
-
Schließlich haben wir über das Prototypmuster gesprochen. Jeder Konstruktor in JS hat ein
-Attribut. Dieses Attribut ist ein Zeiger, der auf das Prototypobjekt zeigt. Dieses Prototypobjekt enthält die Eigenschaften und Methoden, die von allen Instanzen dieses Konstruktors gemeinsam genutzt werden. Es gibt ein -Attribut im Instanzobjekt, das auf das Prototypobjekt verweist, nämlich - , sodass das Objekt die Eigenschaften und Methoden im Prototypobjekt erhalten kann. Gleichzeitig gibt es in allen Objekten ein
-Attribut, und das
des Prototypobjekts zeigt auf den entsprechenden Konstruktor.
使用原型,就意味着我们可以把希望实例共享的属性和方法放到原型对象中去,而不是放在构造函数中,这样每一次通过构造函数new
一个实例,原型对象中定义的方法都不会重新创建一次。来看下面的例子:
function Person() { } Person.prototype.name = "leon"; Person.prototype.age = "20"; Person.prototype.greeting = function() { alert('Hi!'); }; var person1 = new Person(); var person2 = new Person(); alert(person1.name); //"leon" alert(person2.name); //"leon" alert(person1.greeting == person2.greeting); //true
优点:与单纯使用构造函数不一样,原型对象中的方法不会在实例中重新创建一次,节约内存。
缺点:使用空构造函数,实例 person1 和 person2 的
name
都一样了,我们显然不希望所有实例属性方法都一样,它们还是要有自己独有的属性方法。解决办法:构造函数+原型模式组合使用。
另外 JS 中还定义了一些与原型相关的属性,这里罗列一下:
Object.getPrototypeOf()
,取得实例的原型对象。
Object.getPrototypeOf(person1);
isPrototypeOf()
,判断是不是一个实例的原型对象。
Person.prototype.isPrototypeOf(person1);
hasOwnProperty()
,检测一个属性是否存在于实例中
person1.hasOwnProperty("name");
in
,判断一个属性是否存在于实例和原型中。
"name" in person1;
构造函数+原型模式
最后一种方式就是组合使用构造函数和原型模式,构造函数用于定义实例属性,而共享属性和方法定义在原型对象中。这样每个实例都有自己独有的属性,同时又有对共享方法的引用,节省内存。
function Person(name, age) { this.name = name; this.age = age; } Person.prototype = { constructor: Person, nationality: "China", greeting: function() { alert(this.name); } } var person1 = new Person("leon", "20"); var person2 = new Person("jack", "21"); alert(person1.greeting == person2.greeting) //true
上面代码中用对象字面量的形式重写了原型对象,这样相当于创建了一个新的对象,那么它的constructor
属性就会指向Object
,这里为了让它继续指向构造函数,显示的写上了constructor: Person
这种构造函数与原型模式混成的模式,是目前在 JS 中使用最为广泛的一种创建对象的方法。
相关文章推荐:
Das obige ist der detaillierte Inhalt vonAnalyse der Kapselung in der objektorientierten JS-Programmierung. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

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

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.

Einführung In der sich schnell entwickelnden digitalen Welt von heute ist es von entscheidender Bedeutung, robuste, flexible und wartbare WEB-Anwendungen zu erstellen. Die PHPmvc-Architektur bietet eine ideale Lösung, um dieses Ziel zu erreichen. MVC (Model-View-Controller) ist ein weit verbreitetes Entwurfsmuster, das verschiedene Aspekte einer Anwendung in unabhängige Komponenten unterteilt. Die Grundlage der MVC-Architektur Das Kernprinzip der MVC-Architektur ist die Trennung von Belangen: Modell: Kapselt die Daten und Geschäftslogik der Anwendung. Ansicht: Verantwortlich für die Präsentation von Daten und die Abwicklung der Benutzerinteraktion. Controller: Koordiniert die Interaktion zwischen Modellen und Ansichten, verwaltet Benutzeranfragen und Geschäftslogik. PHPMVC-Architektur Die phpMVC-Architektur folgt dem traditionellen MVC-Muster, führt aber auch sprachspezifische Funktionen ein. Das Folgende ist PHPMVC

JavaScript-Tutorial: So erhalten Sie HTTP-Statuscode. Es sind spezifische Codebeispiele erforderlich. Vorwort: Bei der Webentwicklung ist häufig die Dateninteraktion mit dem Server erforderlich. Bei der Kommunikation mit dem Server müssen wir häufig den zurückgegebenen HTTP-Statuscode abrufen, um festzustellen, ob der Vorgang erfolgreich ist, und die entsprechende Verarbeitung basierend auf verschiedenen Statuscodes durchführen. In diesem Artikel erfahren Sie, wie Sie mit JavaScript HTTP-Statuscodes abrufen und einige praktische Codebeispiele bereitstellen. Verwenden von XMLHttpRequest

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

SOLID-Prinzipien sind eine Reihe von Leitprinzipien in objektorientierten Programmierentwurfsmustern, die darauf abzielen, die Qualität und Wartbarkeit des Softwareentwurfs zu verbessern. Zu den von Robert C. Martin vorgeschlagenen SOLID-Prinzipien gehören: Single-Responsibility-Prinzip (SRP): Eine Klasse sollte nur für eine Aufgabe verantwortlich sein, und diese Aufgabe sollte in der Klasse gekapselt sein. Dies kann die Wartbarkeit und Wiederverwendbarkeit der Klasse verbessern. classUser{private$id;private$name;private$email;publicfunction__construct($id,$nam

PHP-Erweiterungen können die objektorientierte Programmierung unterstützen, indem sie benutzerdefinierte Funktionen entwerfen, um Objekte zu erstellen, auf Eigenschaften zuzugreifen und Methoden aufzurufen. Erstellen Sie zunächst eine benutzerdefinierte Funktion, um das Objekt zu instanziieren, und definieren Sie dann Funktionen, die Eigenschaften abrufen und Methoden aufrufen. Im tatsächlichen Kampf können wir die Funktion anpassen, um ein MyClass-Objekt zu erstellen, sein my_property-Attribut abzurufen und seine my_method-Methode aufzurufen.

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.

In Szenarien mit hoher Parallelität der objektorientierten Programmierung werden Funktionen häufig in der Go-Sprache verwendet: Funktionen als Methoden: Funktionen können an Strukturen angehängt werden, um objektorientierte Programmierung zu implementieren, Strukturdaten bequem zu bedienen und spezifische Funktionen bereitzustellen. Funktionen als gleichzeitige Ausführungskörper: Funktionen können als Goroutine-Ausführungskörper verwendet werden, um die gleichzeitige Aufgabenausführung zu implementieren und die Programmeffizienz zu verbessern. Funktion als Rückruf: Funktionen können als Parameter an andere Funktionen übergeben und aufgerufen werden, wenn bestimmte Ereignisse oder Vorgänge auftreten, wodurch ein flexibler Rückrufmechanismus bereitgestellt wird.
