Heim >Web-Frontend >js-Tutorial >Welche Modi gibt es zum Erstellen von Objekten?

Welche Modi gibt es zum Erstellen von Objekten?

零下一度
零下一度Original
2017-06-26 11:29:271523Durchsuche

1 neues Objekt()

Erstellen Sie zuerst eine Objektinstanz und fügen Sie ihr dann Eigenschaften und Methoden hinzu

var Person = new Object()
Person.name = 'hl'
Person.sayName = function () {
  console.log(this.name)
}

2 Objektliteralmethode

Objektliteral Dies Die Methode ist die schnellste und bequemste Methode zum Erstellen von Objekten und wird in vielen Szenarien verwendet.

var Person = {
  name: 'hl',
  sayName: function () {
    console.log(this.name)
  }
}

Der Nachteil der Objektliteralmethode besteht darin, dass beim Erstellen mehrerer Objekte desselben Typs viel doppelter Code generiert wird, daher das Factory-Muster.

3 Factory-Muster

Factory-Muster verwendet Funktionen, um die Details der Objekterstellung zu kapseln. Übergeben Sie beim Aufruf der Funktion die Objekteigenschaften und geben Sie dann ein Objekt zurück.

function createPerson (name) {
  return {
    name: name,
    sayName: function () {
      console.log(this.name)
    }
  }
}
var person = createPerson('hl')
var person = new createPerson('hl') // 寄生构造函数模式

Das gleiche Ergebnis kann auch durch die Verwendung des neuen Operators erzielt werden. Diese Methode wird als parasitäres Konstruktormuster bezeichnet und sollte sich nicht vom direkten Aufruf der Funktion unterscheiden.
Obwohl das Factory-Muster das Problem der Erstellung mehrerer Objekte desselben Typs löst, kann es den spezifischen Typ des Objekts nicht identifizieren.

4 Konstruktormuster

Für Objekte, die über den Konstruktor erstellt wurden, kann der Operator „instanceof“ verwendet werden, um den Typ des Objekts zu bestimmen. Gemäß der Programmierkonvention sollten Konstruktornamen großgeschrieben werden, um sie von gewöhnlichen Funktionen zu unterscheiden.

function Person (name) {
  this.name = name
  this.sayName = function () {
    console.log(this.name)
  }
}
p = new Person('hl')
p instanceof Person // true

Eigenschaften des Konstruktors:

  • Keine erstellten Objekte angezeigt

  • Attribute und Methoden sind diesem direkt zugeordnet

  • Es gibt keine Rückgabeanweisung

  • Verwenden Sie den neuen Operator, um ein Objekt zu erstellen

Die Der Nachteil des Konstruktors besteht darin, dass jede Methode in jeder Instanz neu erstellt wird, was zu einer Speicherverschwendung führt.

5 Prototypmuster

Mit dem Prototypmuster können Sie Objekten ganz einfach Eigenschaften und Methoden hinzufügen.

function Person () {
}
var p = new Person()
Person.prototype.name = 'hl'
Person.prototype.sayName = function () {
  console.log(this.name)
}
p.sayName() // hl

Der Prototyp ist dynamisch, das heißt, zuerst wird das Objekt erstellt und dann der Prototyp geändert, und die Instanz kann auch die entsprechenden Eigenschaften und Methoden erhalten.
Der Prototypmodus ist nicht ohne Mängel. Erstens kann der Prototypmodus keine Initialisierungsparameter übergeben, sodass jede Instanz dieselben Eigenschaften erhält. Zweitens verweisen alle Instanzen auf dasselbe Objekt, siehe Beispiel unten:

function Person () {
}
Person.prototype.relative = ['father','mother']

var person1 = new Person()
var person2 = new Person()
person1.relative.push('sister')
console.log(person2.relative) // [ 'father', 'mother', 'sister' ]

Ändern Sie die Attribute von Person1, und die Attribute von Person2 werden ebenfalls geändert. Instanzen müssen im Allgemeinen über eigene Eigenschaften verfügen, daher wird das Prototypmuster selten allein verwendet.

6 Verwenden Sie das Konstruktormuster und das Prototypmuster in Kombination

Die gebräuchlichste Methode zum Erstellen von Objekten besteht darin, das Konstruktormuster und das Prototypmuster in Kombination zu verwenden. Konstruktoren werden für benutzerdefinierte Eigenschaften verwendet und Prototypmuster werden zum Definieren gemeinsamer Eigenschaften und Methoden verwendet.

function Person (name) {
  this.name = name
}
Person.prototype.sayName = function () {
  console.log(this.name)
}

7 Dynamisches Prototypmuster

Prototypen können im Konstruktor initialisiert werden, um den Objekterstellungsprozess besser zu kapseln.

function Person(name) {
  this.name = name
  if (typeof this.sayName !== 'function') {
    Person.prototype.setName= function (name) {
      this.name = name
    }
    Person.prototype.sayName = function () {
      console.log(this.name)
    }
  }
}

Sie müssen nicht if verwenden, um jede Eigenschaft oder Methode zu überprüfen, Sie müssen nur eine der Eigenschaften oder Methoden überprüfen, die nach der Initialisierung des Prototyps vorhanden sein sollten.

8 Sicheres Konstruktormuster

Ein sicheres Objekt bedeutet, dass es keine öffentlichen Eigenschaften hat, seine Eigenschaften und Methoden nicht auf dieses Objekt verweisen und der neue Operator nicht zum Erstellen von Objekten verwendet wird. Geeignet für den Einsatz in einigen Umgebungen, in denen Sicherheit erforderlich ist, um zu verhindern, dass Daten geändert werden.

function Person (name) {
  return {
    sayName: function () {
      console.log(name)
    }
  }
}
var person = Person('hl')

Im abgesicherten Modus erstellte Objekte haben keine Möglichkeit, die an den Konstruktor übergebenen Originaldaten zu ändern oder darauf zuzugreifen, außer mit den im Konstruktor definierten Methoden.

Das obige ist der detaillierte Inhalt vonWelche Modi gibt es zum Erstellen von Objekten?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
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