Heim > Web-Frontend > js-Tutorial > Hauptteil

Was ist die Javascript-Prototyp-Eigenschaft? und die drei Schritte zum Instanziieren eines Objekts

伊谢尔伦
Freigeben: 2017-07-20 15:42:45
Original
1519 Leute haben es durchsucht

Alle JS-Funktionen verfügen über ein Prototypattribut, das sich auf ein Objekt bezieht, das Prototypobjekt, auch Prototyp genannt. Diese Funktion umfasst Konstruktoren und gewöhnliche Funktionen. Wir sprechen mehr über den Prototyp des Konstruktors, aber wir können nicht leugnen, dass auch gewöhnliche Funktionen Prototypen haben. Zum Beispiel gewöhnliche Funktionen:

function F(){ 
  alert(F.prototype instanceof Object) //true; 
}
Nach dem Login kopieren

Konstruktor, also das Konstruieren von Objekten. Lassen Sie uns zunächst den Prozess der Instanziierung eines Objekts durch den Konstruktor verstehen.

function A(x){ 
  this.x=x; 
} 
var obj=new A(1);
Nach dem Login kopieren

Es gibt drei Schritte, um das obj-Objekt zu instanziieren:
1. Erstellen Sie das obj-Objekt: obj=new Object();

2. Das interne __proto__ von obj zeigt auf den Prototyp der Funktion A, die es erstellt hat. Gleichzeitig gilt obj.constructor===A.prototype.constructor (dies gilt immer, auch wenn A.prototype nicht mehr auf die Funktion A zeigt). Original Ein Prototyp, das heißt: Das Konstruktorattribut des Instanzobjekts der Klasse zeigt immer auf den Prototyp.constructor des „Konstruktors“), sodass obj.constructor.prototype auf A.prototype (obj.constructor) zeigt. Prototyp===A.prototype, wenn sich A.prototype ändert, ist dies nicht wahr, wie unten beschrieben. obj.constructor.prototype und das interne _proto_ sind zwei verschiedene Dinge, wenn ein Objekt instanziiert wird. Obj verfügt über ein internes __proto__, um die Prototypattribute in der Prototypenkette abzurufen . und Prototypmethoden stellt FireFox __proto__ bereit, das in FireFox (obj.__proto__) gemeldet werden kann; .

Wenn diese drei Schritte abgeschlossen sind, hat das obj-Objekt keine Verbindung mit dem Konstruktor A. Selbst wenn der Konstruktor A zu diesem Zeitpunkt Mitglieder hinzufügt, hat dies keine Auswirkungen mehr auf das instanziierte obj-Objekt. Zu diesem Zeitpunkt verfügt das obj-Objekt über das x-Attribut und alle Mitglieder des Prototypobjekts von Konstruktor A. Natürlich hat das Prototypobjekt zu diesem Zeitpunkt keine Mitglieder.


Das Prototypobjekt ist zunächst leer, das heißt, es hat kein Mitglied (dh Prototypeigenschaften und Prototypmethoden). Mit der folgenden Methode können Sie überprüfen, wie viele Mitglieder ein Prototypobjekt hat.

Sobald jedoch Prototypattribute oder Prototypmethoden definiert sind, erben alle über den Konstruktor instanziierten Objekte diese Prototypattribute und Prototypmethoden, was über die interne _proto _Chain implementiert wird.
var num=0; 
for(o in A.prototype) { 
  alert(o);//alert出原型属性名字 
  num++; 
} 
alert("member: " + num);//alert出原型所有成员个数。
Nach dem Login kopieren

Dann haben alle Objekte von A eine Say-Methode. Die Say-Methode dieses Prototypobjekts ist die einzige Kopie, die von allen geteilt wird, anstatt dass jedes Objekt eine Kopie der Say-Methode hat.
A.prototype.say=function(){alert("Hi")};
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonWas ist die Javascript-Prototyp-Eigenschaft? und die drei Schritte zum Instanziieren eines Objekts. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

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
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!