Zusammenfassung verschiedener Möglichkeiten zum Erstellen von Objekten in js und ihrer Vor- und Nachteile

Zusammenfassung verschiedener Möglichkeiten zum Erstellen von Objekten in js und ihrer Vor- und Nachteile

Frühe Erstellungsmethode

var obj = neues Objekt()
Objektname = "xxx"
obj.alter = 18
Oder verwenden Sie das Objektliteral var o1 = {
  Name: "xxx",
  sagen: () => {}
}
var o2 = {
  Name: "xxx",
  sagen: () => {}
}

Nachteile: Die Verwendung derselben Schnittstelle zum Erstellen vieler Objekte führt zu einer Menge doppeltem Code

Fabrikmuster

Funktion Fabrik (Name, Alter) {
  var obj = neues Objekt()
  obj.name = Name
  obj.age = Alter
  Rückgabeobjekt
}
var o1 = Fabrik(1, 11)
var o2 = Fabrik(2, 22)

Vorteile: Lösung des Code-Duplikationsproblems bei der Erstellung mehrerer ähnlicher Objekte Nachteile: Keine Identifizierung des Objekttyps

Konstruktormuster

Konstruktoren können in ECMAScript verwendet werden, um Objekte bestimmter Typen zu erstellen, etwa native Konstruktoren wie Object und Array. Darüber hinaus können Sie benutzerdefinierte Konstruktoren erstellen, um Eigenschaften und Methoden benutzerdefinierter Objekte zu definieren.

Funktion Person(Name, Alter) {
  dieser.name = Name
  this.age = Alter
  dies.sayName = function() {
    console.log(dieser.Name)
  }
}
var o1 = neue Person(1,11)
var o2 = neue Person(2,22)
o1.sayName() // 1
o2.sayName() // 2

Vorteile: Instanzen, die im Konstruktormodus erstellt werden, können Typkennungen unterscheiden (Instanzbeurteilung).
Nachteile: Jede Methode muss auf der Instanz neu erstellt werden. Beispielsweise hat die sayName-Methode zweier Instanzen dieselbe Aufgabe, erstellt aber tatsächlich zwei Funktionsinstanzen.

Konstruktormusteroptimierung

Funktion Person(Name, Alter) {
  dieser.name = Name
  this.age = Alter
}
Funktion sayName () {
  console.log(dieser.Name)
}
var o1 = neue Person(1,11)
var o2 = neue Person(2,22)
o1.sayName() // 1
o2.sayName() // 2

Vorteile: Mehrere Instanzen teilen sich im globalen Bereich definierte Funktionen, wodurch das Problem gelöst wird, dass zwei Funktionen dasselbe tun. Nachteile: Im globalen Bereich definierte Funktionen können tatsächlich nur von einem bestimmten Objekt aufgerufen werden, der Name im globalen Bereich ist seines Namens nicht würdig, und wenn ein Objekt viele Methoden definieren muss, müssen viele globale Funktionen erstellt werden, wodurch der benutzerdefinierte Objekttyp keine Kapselungseigenschaften aufweist.

Prototyp-Muster

Jede von uns erstellte Funktion hat eine Prototypeigenschaft, die ein Zeiger auf ein Objekt ist. Der Zweck dieses Objekts besteht darin, Eigenschaften und Methoden zu enthalten, die von allen Instanzen eines bestimmten Typs gemeinsam genutzt werden können. Das heißt, der Prototyp ist das Prototypobjekt der vom Konstruktor erstellten Objektinstanz.

Funktion Person(){}
Person.Prototyp.Name = '123'
Person.Prototyp.Alter = 18
Person.prototype.sayName = Funktion() {
  console.log(dieser.Name)
}
var o1 = neue Person(1,11)
var o2 = neue Person(2,22)
o1.sayName() // 123
o2.sayName() // 123

Vorteile: Lösen Sie das Problem der gemeinsamen Nutzung von Eigenschaften oder Ereignissen durch Instanzen. Nachteile: Da Instanzen Eigenschaften gemeinsam nutzen, führen Änderungen an einer Instanz bei Eigenschaften, deren Werte Referenztypen sind, zu Änderungen an den Werten, auf die andere Instanzen zugreifen. wie:

Funktion Person(){}
Person.Prototyp.Name = '123'
Person.Prototyp.Alter = 18
Person.Prototyp.Freunde = ['a', 'b']
Person.prototype.sayName = Funktion() {
  console.log(dieser.Name)
}
var o1 = neue Person(1,11)
var o2 = neue Person(2,22)
o1.friends.push('c')
console.log(o2.friends) // ['a', 'b', 'c']

Kombination aus Konstruktor- und Prototypmustern

Funktion Person(Name, Alter) {
  dieser.name = Name
  this.age = Alter
  diese.freunde = ['a']
}
Person.Prototyp = {
  Konstrukteur: Person,
  sageName: Funktion() {
    console.log(dieser.Name)
  }
}
var o1 = neue Person(1,11)
var o2 = neue Person(2,22)
o1.sayName() // 1
o2.sayName() // 2

Vorteile: Jede Instanz hat ihre eigenen Eigenschaften, teilt gleichzeitig die Methodenreferenz und unterstützt auch die Parameterübergabe

Dynamisches Prototypmuster

Funktion Person(Name, Alter) {
  dieser.name = Name
  this.age = Alter
  diese.freunde = ['a']
  wenn(Typ von diesem.sayName != 'Funktion') {
    Person.prototype.sayName = Funktion() {
      console.log(dieser.Name)
    }
  }
}
var o1 = neue Person(1,11)
var o2 = neue Person(2,22)
o1.sayName() // 1
o2.sayName() // 2

Vorteile: Nur einmal erstellen, wenn die Methode nicht existiert, wodurch wiederholtes Erstellen vermieden wird

Muster des parasitären Konstruktors

Funktion SpezialArray() {
  var o = neues Array()
  // Wert hinzufügen o.push.apply(o, Argumente)
  // Methode o.toPipedString = function(){ hinzufügen
    gib dies zurück.join('|')
  }
  Rückkehr o
}
var o1 = neues SpezialArray(1,11)
o1.toPipedString() // 1|11

Vorteile: Hinzufügen spezieller Methoden zu einem Objekt, ohne den ursprünglichen Konstruktor zu ändern. Nachteile: Das zurückgegebene Objekt hat keine Beziehung zum Konstruktor und dem Prototyp des Konstruktors, die Methode unterscheidet sich nicht von einem außerhalb des Konstruktors erstellten Objekt.

Sicheres Konstruktormuster

Funktion Person(Name) {
  var o = neues Objekt()
  // Methode o.getName = function(){ hinzufügen
    Rückgabename
  }
  Rückkehr o
}
var o1 = neue Person(1)
o1.getName() // 1

Im Gegensatz zu parasitären Konstruktoren werden this- und new-Aufrufe nicht verwendet. Vorteile: Es gibt keine Möglichkeit, auf den Namen zuzugreifen, außer getName, daher kann es in einigen sicheren Umgebungen verwendet werden. Nachteile: Ähnlich wie beim Factory-Muster ist es unmöglich, den Typ des Objekts zu identifizieren.

Oben finden Sie detaillierte Informationen zu den verschiedenen Möglichkeiten zum Erstellen von Objekten in js sowie eine Zusammenfassung ihrer Vor- und Nachteile. Weitere Informationen zum Erstellen von Objekten in js finden Sie in den anderen verwandten Artikeln auf 123WORDPRESS.COM!

Das könnte Sie auch interessieren:
  • Detaillierte Erläuterung verschiedener Möglichkeiten zum Erstellen von Objekten und Objektmethoden in js
  • Zusammenfassung der objektorientierten Objekterstellungsmethode in JavaScript
  • So erstellen Sie Funktionen und Objekte in JS
  • Zusammenfassung der Methoden zur Objekterstellung in JavaScript [Factory-Muster, Konstruktor-Muster, Prototyp-Muster usw.]
  • Zusammenfassung gängiger Möglichkeiten zum Erstellen von Objekten in JavaScript
  • Zusammenfassung gängiger Möglichkeiten zum Erstellen benutzerdefinierter Objekte in JavaScript
  • Eine umfassende Zusammenfassung von sieben Möglichkeiten zum Erstellen von Objekten in JavaScript
  • Analyse gängiger Methoden und Prinzipien zum Erstellen von JS-Objekten
  • Sieben Möglichkeiten zum Erstellen von Objekten in JavaScript (empfohlen)
  • Vier Möglichkeiten zum Erstellen von Objekten in JS

<<:  Tutorial zur Installation des MySQL 5.7.18-Binärpakets unter Linux (ohne Standardkonfigurationsdatei my_default.cnf)

>>:  Verwenden der Docker Enterprise Edition zum Erstellen Ihres eigenen privaten Registrierungsservers

Artikel empfehlen

Erstellen und Verwenden von Docker-Datenvolumencontainern

Ein Datenvolumencontainer ist ein Container, der ...

MySQL-Interviewfragen: So richten Sie Hash-Indizes ein

Zusätzlich zu den B-Tree-Indizes bietet MySQL auc...

Die Verbindung zwischen JavaScript und TypeScript

Inhaltsverzeichnis 1. Was ist JavaScript? 2. Wofü...

Einige Probleme, die bei der Installation von MySQL auftreten können

Frage 1: Wenn Sie während der Installation „net s...

Ubuntu 18.04 installiert MySQL 5.7.23

Ich habe MySQL zuvor problemlos in Ubuntu 16.04 i...

Vue3 implementiert CSS unendlichen nahtlosen Scrolleffekt

In diesem Artikelbeispiel wird der spezifische Co...

Docker-Installationstutorial: Erste Schritte (Anfängerausgabe)

Doccer-Einführung: Docker ist eine Container-bezo...

Detaillierte Hinweise zu React für Einsteiger

Inhaltsverzeichnis 1. Grundlegendes Verständnis v...

HTML-Formular und die Verwendung interner Formular-Tags

Code kopieren Der Code lautet wie folgt: <html...