Inhaltsverzeichnis
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:
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
构造函数+原型模式
Heim Web-Frontend js-Tutorial Analyse der Kapselung in der objektorientierten JS-Programmierung

Analyse der Kapselung in der objektorientierten JS-Programmierung

Aug 01, 2018 pm 04:07 PM
javascript 封装 面向对象编程

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--> 🎜>

Objektliteral

Es 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");
Nach dem Login kopieren

    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");
Nach dem Login kopieren
newEine Instanz durchläuft vier Schritte durch den Konstruktor:

new

    Erstellen Sie ein neues Objekt; 🎜>
  1. Binden Sie das

    im Konstruktor an das neue Objekt

  2. 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).

  3. 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. :
  4. alert(person1.constructor === Person) //true
    alert(person1 instanceof Person) // true
    Nach dem Login kopieren
  5. Aber es gibt immer noch ein Problem:

    alert(person1.greeting == person2.greeting) //false
    Nach dem Login kopieren
    return 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.

Vorteile: Löst das Problem der Erstellung ähnlicher Objekte und kann Objekttypen erkennen. constructor

Nachteil: Die Konstruktormethode muss für jede Instanz einmal erstellt werden.

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
Nach dem Login kopieren
  • 优点:与单纯使用构造函数不一样,原型对象中的方法不会在实例中重新创建一次,节约内存。

  • 缺点:使用空构造函数,实例 person1 和 person2 的 name都一样了,我们显然不希望所有实例属性方法都一样,它们还是要有自己独有的属性方法。

  • 解决办法:构造函数+原型模式组合使用。

另外 JS 中还定义了一些与原型相关的属性,这里罗列一下:

  • Object.getPrototypeOf(),取得实例的原型对象。

Object.getPrototypeOf(person1);
Nach dem Login kopieren
  • isPrototypeOf(),判断是不是一个实例的原型对象。

Person.prototype.isPrototypeOf(person1);
Nach dem Login kopieren
  • hasOwnProperty(),检测一个属性是否存在于实例中

person1.hasOwnProperty("name");
Nach dem Login kopieren
  • in,判断一个属性是否存在于实例和原型中。

"name" in person1;
Nach dem Login kopieren

构造函数+原型模式

最后一种方式就是组合使用构造函数和原型模式,构造函数用于定义实例属性,而共享属性和方法定义在原型对象中。这样每个实例都有自己独有的属性,同时又有对共享方法的引用,节省内存。

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
Nach dem Login kopieren

上面代码中用对象字面量的形式重写了原型对象,这样相当于创建了一个新的对象,那么它的constructor属性就会指向Object,这里为了让它继续指向构造函数,显示的写上了constructor: Person

这种构造函数与原型模式混成的模式,是目前在 JS 中使用最为广泛的一种创建对象的方法。

相关文章推荐:

jQuery自调用匿名函数是如何调用的?

JavaScript是否使用var定义变量的区别,举例说明

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!

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)

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.

PHP MVC-Architektur: Webanwendungen für die Zukunft erstellen PHP MVC-Architektur: Webanwendungen für die Zukunft erstellen Mar 03, 2024 am 09:01 AM

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

Einfaches JavaScript-Tutorial: So erhalten Sie den HTTP-Statuscode Einfaches JavaScript-Tutorial: So erhalten Sie den HTTP-Statuscode Jan 05, 2024 pm 06:08 PM

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

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

„PHP-Objektorientierte Programmierentwurfsmuster: SOLID-Prinzipien und ihre Anwendungen verstehen' „PHP-Objektorientierte Programmierentwurfsmuster: SOLID-Prinzipien und ihre Anwendungen verstehen' Feb 25, 2024 pm 09:20 PM

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

Entwicklung von PHP-Erweiterungen: Wie entwerfe ich benutzerdefinierte Funktionen zur Unterstützung der objektorientierten Programmierung? Entwicklung von PHP-Erweiterungen: Wie entwerfe ich benutzerdefinierte Funktionen zur Unterstützung der objektorientierten Programmierung? Jun 01, 2024 pm 03:40 PM

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.

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.

Anwendung von Golang-Funktionen in Szenarien mit hoher Parallelität in der objektorientierten Programmierung Anwendung von Golang-Funktionen in Szenarien mit hoher Parallelität in der objektorientierten Programmierung Apr 30, 2024 pm 01:33 PM

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.

See all articles