Heim  >  Artikel  >  Web-Frontend  >  Eine kurze Einführung in Prototypen und Prototypketten in Javascript

Eine kurze Einführung in Prototypen und Prototypketten in Javascript

不言
不言nach vorne
2018-10-20 16:49:051768Durchsuche

Dieser Artikel bietet Ihnen eine kurze Einführung in Prototypen und Prototypketten in JavaScript. Ich hoffe, dass er für Freunde hilfreich ist.

[[Prototyp]]

Fast alle Objekte erzeugen bei ihrer Erstellung eine [[Prototyp]]-Kette, die oft als Prototypenkette bezeichnet wird. Wenn Sie versuchen, auf die Eigenschaften eines Objekts zu verweisen, wird die Operation [[Get]] des Objekts ausgelöst. Bei der Standardoperation [[Get]] besteht der erste Schritt darin, herauszufinden, ob das aktuelle Objekt über die gewünschte Eigenschaft verfügt Wenn ja, wird es verwendet. Wenn es nicht gefunden wird, wird nach der Prototypenkette dieses Objekts gesucht. Zum Beispiel:

var one = {
  type: 'one'
}
var two = Object.create(one)

console.log(two.type) // one

Im obigen Beispiel gibt es kein Typattribut Zwei Objekte, aber weil Object.create (ein neues Objekt mit dem angegebenen Prototypobjekt und den angegebenen Attributen erstellt), werden die beiden Objekte während des Suchvorgangs in der Prototypenkette miteinander verbunden, auch wenn das Typattribut vorhanden ist Wenn es in den beiden Objekten nicht gefunden wird, wird die Suche nach dem Typattribut fortgesetzt und es wird ausgegeben. Wenn Sie die gesamte Prototypenkette durchsuchen und es nicht finden, wird undefiniert

Prototyp

Um klar zu erklären, was Prototyp ist, zuerst ein einfaches Beispiel:

function origin(type) {
  this.type = type
  console.log(this.type)
}
origin.prototype.name = 'origin'
var son1 = new origin('male')
var son2 = new origin('male')
console.log(son1.name) // origin
console.log(son2.name) // origin
Das Prototypattribut des Funktionsursprungs entspricht tatsächlich einem Objekt, auf das dieses Objekt zeigt Daher wird beim Aufruf des Namensattributs in der gesamten Prototypenkette nach dem Wert von origin.prototype.name gesucht Aus einer anderen Perspektive kann man auch sagen, dass son1 und son2 das Prototypobjekt des Funktionsursprungs erben

Konstruktor

Lassen Sie uns Schauen Sie sich zunächst ein einfaches Beispiel an:

function origin() {

}
const son = new origin()
console.log(origin.prototype.constructor === origin) // true
console.log(son.constructor === origin) // true
origin.prototype verfügt standardmäßig über ein öffentliches und nicht aufzählbares Attribut, den Konstruktor, und dieses Attribut bezieht sich auf die Funktion, die dem Objekt zugeordnet ist, also origin.prototype.construct = origin, und das Instanzobjekt son hat auch ein construcor-Attribut, das auf die Funktion verweist, die dieses Objekt erstellt hat

_proto_

__proto__ ist tatsächlich eine Funktion, die von den meisten Browsern unterstützt wird So greifen Sie auf eine Eigenschaft der internen Prototypenkette zu

    son.__proto__ === origin.prototype // true
Wenn son.__proto__ tatsächlich son.__proto__() aufruft, ist der Rückgabewert derselbe wie das Ergebnis von Object.getPrototypeOf(origin)

Das obige ist der detaillierte Inhalt vonEine kurze Einführung in Prototypen und Prototypketten in Javascript. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:segmentfault.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen