Heim > Artikel > Web-Frontend > Die Beziehung zwischen Eigenschaft und Prototyp von Javascript-Objekten
ECMAScript kann zwei Arten von Objekten erkennen, eines heißt Native Object und gehört zur Sprachkategorie; das andere heißt Host Object und wird von der laufenden Umgebung wie Dokumentobjekt, Dom Node usw. bereitgestellt.
Native Objekte sind eine lose Struktur und Eigenschaften können dynamisch hinzugefügt werden. Dieser Wert kann eine Referenz auf ein anderes Objekt oder einen integrierten Datentyp (String, Number, Boolean, Null oder Undefiniert) sein 🎜> Das folgende einfache Beispiel beschreibt, wie ein JavaScript-Objekt den Wert einer Eigenschaft festlegt und wie der Wert der Eigenschaft gelesen wird.
Das Erstellen der Attribute eines Objekts ist sehr einfach. Das Erstellen von Attributen kann direkt durch den Zuweisungsvorgang abgeschlossen werden.
Code
var objectRef = new Object(); //ein generisches Javascript-Objekt erstellen
objectRef.testNumber = 5;
/* - oder:- */
objectRef["testNumber"] = 5; Wenn es bereits vorhanden ist, wird dieses Attribut nicht erneut erstellt. Der Zuweisungsvorgang dient lediglich dazu, den Wert des Attributs
objectRef.testNumber = 8;
/* zurückzusetzen. */objectRef ["testNumber"] = 8;
Der Prototyp eines js-Objekts kann selbst ein Objekt sein oder Eigenschaften (Eigenschaft) haben ) ist dasselbe wie die Erstellung normaler Objekteigenschaften
Wertoperation
Bei der Wertoperation sind Eigenschaft und Prototyp unterschiedlich. Schauen wir uns zunächst die einfachste Eigenschaftswertoperation an.
Code
/*Weisen Sie dem Attribut eines Objekts einen Wert zu. Wenn das Objekt dieses Attribut nicht hat, hat das Objekt nach der Zuweisungsoperation dieses Attribut*/
/* Den Wert dieses Attributs lesen*/
var val = objectRef.testNumber;
/* Jetzt hat val den Wert 8, der gerade objectRef*/
zugewiesen wurde
Prototyp enthüllt
Wenn er auf diese Kette stößt wenn der Prototyp der Formation in der Kette null ist. (Der Standardprototyp von Object ist null)
Code
var objectRef = new Object(); //erstelle ein generisches Javascript-Objekt
Erstelle zu diesem Zeitpunkt ein neues JS-Objekt Der Prototyp dieses Objekts ist Null, daher enthält die Prototypenkette von objectRef nur ein Objekt Object.prototype
Wir betrachten den folgenden Code
Code
/* Erstellen Sie den Konstruktor des Typs MyObject1
/* Konstruieren Sie den Konstruktor des Typs MyObject2
MyObject2 - Typ:-
*/
function MyObject2(formalParameter){
/* Erstellen Sie eine Eigenschaftsname für das Objekt testString*/
this.testString = formalParameter;
/* Im nächsten Schritt wird das Standardprototypattribut von MyObject2 durch das MyObject1-Objekt*/
MyObject2 ersetzt .prototype = new MyObject1 (8);
/* Schließlich erstellen wir ein Objekt vom Typ MyObject2*/ Das erste Objekt in der Kette ist auch das MyObject1-Objekt ein Prototyp.
Dieser Prototyp ist der Standardprototyp von Object. Der Prototyp von Object.prototype ist null.
Wenn eine Wertoperation auftritt, beginnt die gesamte Prototypkette von objectRef zu funktionieren
Code
var val = objectRef.testString;
objectRef hat ein Attribut namens testString, dann dieses Der Code weist val den Wert von testString zu 8 statt undefine. Dies liegt daran, dass der Interpreter den Prototyp dieses Objekts überprüft, nachdem er das gesuchte Attribut
im aktuellen Objekt nicht gefunden hat. Der Prototyp von objectRef ist das MyObject1-Objekt und dieses Objekt hat testNumber . Dieses Attribut, also val, erhält den Wert 8.
Code
var val = objectRef.toString;
Jetzt ist val eine Eigenschaft von Object.prototype, da weder MyObject1 noch MyObject2 die toString-Eigenschaft definieren > also kehrt Object.prototype zurück.
var val = objectRef.madeUpProperty;
Die Schreiboperation erstellt ein Attribut mit demselben Namen für das obj-Objekt selbst ( Wenn der Attributname nicht vorhanden ist
Dies bedeutet, dass objectRef.testNumber = 3 eine Eigenschaft für das objectRef-Objekt mit dem Namen testNumber erstellt. Wenn Sie testNumber das nächste Mal lesen möchten, funktioniert die Eigenschaftstypkette nicht und Sie werden nur Holen Sie sich die Eigenschaft 3 von objectRef. Die testNumber-Eigenschaft von MyObject1 wird nicht geändert. Der folgende Code kann den Konstruktor des Typs MyObject1
MyObject1 überprüfen .
*/
/* Erstellen Sie eine Eigenschaft namens testNumber für das Objekt
*/
this.testNumber =
}
/* Build-Konstruktor vom Typ MyObject2
MyObject2 – Typ:-
*/
function MyObject2(formalParameter){
/* Erstellen Sie eine Eigenschaft mit dem Namen testString*/
this.testString = formalParameter;
}
/* Im nächsten Schritt wird die Standardeigenschaft „MyObject2“ durch das Objekt „MyObject1“ ersetzt*/
var obj1 = new MyObject1(8);
MyObject2.prototype = obj1;
/* Schließlich erstellen wir ein Objekt vom Typ MyObject2*/
var objectRef = new MyObject2( "String_Value" );
alert(objectRef.testNumber) ;
objectRef.testNumber = 5;
alert(objectRef.testNumber);
alert(obj1.testNumber);