JavaScript-Prototyp

Bevor Sie Prototypen lernen, sollten Sie sich diese Tutorials ansehen:

  • JavaScript-Objekte
  • JavaScript-Konstruktorfunktion

Wie Sie wissen, können Sie ein Objekt in JavaScript mithilfe einer Objekt-Konstruktorfunktion erstellen. Zum Beispiel,

// constructor functionfunction Person () { this.name = 'John', this.age = 23}// creating objectsconst person1 = new Person();const person2 = new Person();

Im obigen Beispiel ist function Person() eine Objektkonstruktorfunktion. Wir haben daraus zwei Objekte person1 und person2 erzeugt.

JavaScript Prototype

In JavaScript hat jede Funktion und jedes Objekt standardmäßig eine Eigenschaft namens Prototype. Zum Beispiel,

function Person () { this.name = 'John', this.age = 23}const person = new Person();// checking the prototype valueconsole.log(Person.prototype); // { ... }

Im obigen Beispiel versuchen wir, auf die Prototype-Eigenschaft einer Person Konstruktorfunktion zuzugreifen.

Da die Prototype-Eigenschaft im Moment keinen Wert hat, zeigt sie ein leeres Objekt { … }.

Prototyp-Vererbung

In JavaScript kann ein Prototyp verwendet werden, um einer Konstruktorfunktion Eigenschaften und Methoden hinzuzufügen. Und Objekte erben Eigenschaften und Methoden von einem Prototyp. Beispiel:

// constructor functionfunction Person () { this.name = 'John', this.age = 23}// creating objectsconst person1 = new Person();const person2 = new Person();// adding property to constructor functionPerson.prototype.gender = 'male';// prototype value of Personconsole.log(Person.prototype);// inheriting the property from prototypeconsole.log(person1.gender);console.log(person2.gender);

Ausgabe

{ gender: "male" }malemale

Im obigen Programm haben wir eine neue Eigenschaft gender zur Person Konstruktorfunktion mit hinzugefügt:

Person.prototype.gender = 'male';

Dann erbt das Objekt person1 und person2 die Eigenschaft gender von der Prototyp-Eigenschaft der Person Konstruktorfunktion.

Damit können beide Objekte person1 und person2 auf die Eigenschaft gender zugreifen.

Hinweis: Die Syntax zum Hinzufügen der Eigenschaft zu einer Objektkonstruktorfunktion lautet:

objectConstructorName.prototype.key = 'value';

Prototype wird verwendet, um allen Objekten, die von einer Konstruktorfunktion erzeugt werden, eine zusätzliche Eigenschaft zu geben.

Methoden zu einer Konstruktorfunktion mit Prototyp hinzufügen

Sie können auch neue Methoden zu einer Konstruktorfunktion mit Prototyp hinzufügen. Beispiel:

// constructor functionfunction Person () { this.name = 'John', this.age = 23}// creating objectsconst person1 = new Person();const person2 = new Person();// adding a method to the constructor functionPerson.prototype.greet = function() { console.log('hello' + ' ' + this.name);}person1.greet(); // hello Johnperson2.greet(); // hello John

Im obigen Programm wird der greet Konstruktorfunktion eine neue Methode Person mit Hilfe eines Prototyps hinzugefügt.

Prototyp ändern

Wenn ein Prototypwert geändert wird, dann haben alle neuen Objekte den geänderten Eigenschaftswert. Alle zuvor erstellten Objekte haben den vorherigen Wert. Zum Beispiel,

// constructor functionfunction Person() { this.name = 'John'}// add a propertyPerson.prototype.age = 20;// creating an objectconst person1 = new Person();console.log(person1.age); // 20// changing the property value of prototypePerson.prototype = { age: 50 }// creating new objectconst person3 = new Person();console.log(person3.age); // 50console.log(person1.age); // 20

Hinweis: Sie sollten die Prototypen von standardmäßig in JavaScript eingebauten Objekten wie Strings, Arrays usw. nicht ändern.

JavaScript Prototype Chaining

Wenn ein Objekt versucht, auf dieselbe Eigenschaft zuzugreifen, die in der Konstruktorfunktion und im Prototyp-Objekt enthalten ist, übernimmt das Objekt die Eigenschaft aus der Konstruktorfunktion. Beispiel:

function Person() { this.name = 'John'}// adding property Person.prototype.name = 'Peter';Person.prototype.age = 23const person1 = new Person();console.log(person1.name); // Johnconsole.log(person1.age); // 23

Im obigen Programm ist ein Eigenschaftsname in der Konstruktorfunktion und auch in der Prototypeigenschaft der Konstruktorfunktion deklariert.

Wenn das Programm ausgeführt wird, schaut person1.name in der Konstruktorfunktion nach, ob es eine Eigenschaft namens name gibt. Da die Konstruktorfunktion die Eigenschaft name mit dem Wert 'John' hat, übernimmt das Objekt den Wert dieser Eigenschaft.

Wenn das Programm ausgeführt wird, schaut person1.age in der Konstruktorfunktion nach, ob es eine Eigenschaft namens age gibt. Da die Konstruktorfunktion keine age-Eigenschaft hat, schaut das Programm in das Prototyp-Objekt der Konstruktorfunktion und das Objekt erbt die Eigenschaft von dem Prototyp-Objekt (falls vorhanden).

Hinweis: Sie können auch von einem Objekt aus auf die Prototypeigenschaft einer Konstruktorfunktion zugreifen.

function Person () { this.name = 'John'}// adding a prototypePerson.prototype.age = 24;// creating objectconst person = new Person();// accessing prototype propertyconsole.log(person.__proto__); // { age: 24 }

Im obigen Beispiel wird ein person-Objekt verwendet, um mit __proto__ auf die Prototypeigenschaft zuzugreifen. __proto__ ist jedoch veraltet und sollte nicht mehr verwendet werden.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.