Heim > Web-Frontend > js-Tutorial > Hauptteil

Verständnis der JavaScript-Prototypkette

高洛峰
Freigeben: 2016-12-09 09:13:18
Original
1013 Leute haben es durchsucht

Jedes JavaScript-Objekt ist mit einem anderen Objekt verknüpft, und das zugehörige Objekt ist das, was wir als „Prototyp“ bezeichnen. Jedes Objekt erbt Eigenschaften und Methoden vom Prototyp. Es gibt ein spezielles Objekt, das keinen Prototyp hat, nämlich Object. Dies wird in den folgenden Abbildungen erläutert.

Zum Beispiel deklarieren wir zunächst eine Funktion Student():

function Student(name){
  this.name = name;
 this.hello = function(){
   alert(`Hello,${this.name}`);
 }
 }
Nach dem Login kopieren

Diese Funktion enthält einen Attributnamen und eine Methode hello .
In JavaScript können Sie die Student-Funktion über das Schlüsselwort new aufrufen (das Schreiben von new ist keine normale Funktion, das Schreiben von new ist ein Konstruktor) und gibt ein Objekt zurück, dessen Prototyp auf Student.prototype zeigt, wie unten gezeigt:

var xiaoming = new Student("xiaoming");
alert(xiaoming.name); // xiaoming
xiaoming.hello(); // Hello,xiaoming
Nach dem Login kopieren

Wenn wir bestätigen möchten, ob unsere Annahme richtig ist, möchten wir vergleichen, ob xiaoming.prototype und Student.prototype gleich sind.
Xiaming verfügt jedoch nicht über ein Prototypattribut, Sie können es jedoch mit __proto__ anzeigen. Als Nächstes verwenden wir diese Attribute, um die Prototypkette zwischen Xiaoming, Student und Objekt anzuzeigen:

document.onreadystatechange = function(){
 // interactive表示文档已被解析,但浏览器还在加载其中链接的资源
 if(document.readyState === "interactive"){
  var xiaoming = new Student("xiaoming");
  alert(xiaoming.name);
  xiaoming.hello();
  console.log("xiaoming.__proto__:");
  console.log(xiaoming.__proto__);
  console.log("Student.prototype:");
  console.log(Student.prototype);
  console.log("xiaoming.__proto__ === Student.prototype:" + xiaoming.__proto__ === Student.prototype);
  console.log("Student.prototype.constructor:" + Student.prototype.constructor);
  console.log("Student.prototype.prototype:" + Student.prototype.prototype);
  console.log("Student.prototype.__proto__:");
  console.log(Student.prototype.__proto__);
  console.log(Object.prototype);
  console.log("Student.prototype.__proto__ === Object.prototype:" + Student.prototype.__proto__ === Object.prototype);
 }
}
Nach dem Login kopieren


Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage