Heim  >  Artikel  >  Web-Frontend  >  Die Beziehung zwischen Eigenschaft und Prototyp von Javascript-Objekten

Die Beziehung zwischen Eigenschaft und Prototyp von Javascript-Objekten

黄舟
黄舟Original
2016-12-14 15:56:25885Durchsuche

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.

Zuweisungsvorgang

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

Eine Eigenschaft namens testNumber kann so erstellt werden.

Code

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

Code

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

und unterscheidet sich nicht.


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*/

objectRef. testNumber = 8;

/* Den Wert dieses Attributs lesen*/ 
var val = objectRef.testNumber; 
 
/* Jetzt hat val den Wert 8, der gerade objectRef*/ 
zugewiesen wurde
Prototyp enthüllt

Aber alle Objekte können auch Prototypen haben. Auf diese Weise entsteht eine Prototypenkette.

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

MyObject1 – Typ.


/* 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.

Code

var val = objectRef.madeUpProperty;

Der letzte Wert ist undefiniert, da MyObject1, MyObject2 und Object die Eigenschaft madeUpProperty nicht definieren, was Sie also erhalten, ist undefiniert.


Die Leseoperation liest den ersten Attributwert mit demselben Namen, der in obj selbst und in der Prototypenkette gefunden wird.

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 .
*/

function MyObject1(formalParameter){

/* 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);




Stellungnahme:
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