Heim >Web-Frontend >js-Tutorial >Wie kann man beim Erstellen benutzerdefinierter Objekte in JavaScript zwischen Prototyping und Closing wählen?

Wie kann man beim Erstellen benutzerdefinierter Objekte in JavaScript zwischen Prototyping und Closing wählen?

Barbara Streisand
Barbara StreisandOriginal
2024-12-19 17:33:14953Durchsuche

How to Choose Between Prototyping and Closure for Creating Custom Objects in JavaScript?

So erstellen Sie benutzerdefinierte Objekte in JavaScript

JavaScript bietet verschiedene Ansätze zum Erstellen benutzerdefinierter Objekte. Hier sind zwei unterschiedliche Modelle:

Prototyping-Methode

Das Prototyping-Modell stammt ursprünglich aus JavaScript. Dabei wird die Prototypeigenschaft einer Konstruktorfunktion verwendet, um Eigenschaften und Methoden zu Instanzen hinzuzufügen:

function Shape(x, y) {
  this.x = x;
  this.y = y;
}

Shape.prototype.toString = function() {
  return 'Shape at ' + this.x + ', ' + this.y;
};

function Circle(x, y, r) {
  Shape.call(this, x, y); // Invoke base constructor
  this.r = r;
}

Circle.prototype = new Shape(); // Inherit prototype

Circle.prototype.toString = function() {
  return 'Circular ' + Shape.prototype.toString.call(this) + ' with radius ' + this.r;
};

Vorteile:

  • Leicht und nativ für JavaScript
  • Wiederverwendung vorhandener Prototyp
  • Unterstützt Instanz von

Nachteile:

  • Basiskonstruktor muss im Unterklassenkonstruktor aufgerufen werden
  • Erfordert die Handhabung des Konstruktors bei der Unterklassenbildung

Closure Way

Das Schließungsmodell vermeidet Vererbung durch Verwendung von Abschlüssen zum Einschließen instanzspezifischer Daten und Methoden:

function Shape(x, y) {
  var that = this;

  this.x = x;
  this.y = y;

  this.toString = function() {
    return 'Shape at ' + that.x + ', ' + that.y;
  };
}

function Circle(x, y, r) {
  var that = this;

  Shape.call(this, x, y);
  this.r = r;

  var _baseToString = this.toString;
  this.toString = function() {
    return 'Circular ' + _baseToString.call(that) + ' with radius ' + that.r;
  };
};

var mycircle = new Circle();

Vorteile:

  • Verhindert die Instanzfreigabe von Methoden
  • Automatische Bindung von Methoden an Instanzen

Nachteile:

  • Weniger effizient aufgrund von Methodenkopien pro Instanz
  • Instanz von kann nicht ohne benutzerdefinierte Logik verwendet werden

Das obige ist der detaillierte Inhalt vonWie kann man beim Erstellen benutzerdefinierter Objekte in JavaScript zwischen Prototyping und Closing wählen?. 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