2009-08-31 7 views
10

Ich mag den Unterschied zwischen Klasseneigenschaft und Prototype in Javascript lernen, was ich meine ist im Code gezeigt:Unterschied zwischen Klasseneigenschaften und Funktion Prototype in Javascript

function Rectangle(x, y) { 
    this.width = x; 
    this.height = y; 
} 

Rectangle.UNIT = new Rectangle(1, 1); 

Rectangle.prototype.UNIT = new Rectangle(1, 1); 

Das, was ich weiß, ist Prototyp arbeitet wie Objekt erben, was bedeutet, UNIT wird von nun an alle Instanzen angezeigt werden, aber Rectangle.UNIT = new Rectangle(1, 1); Code nicht das gleiche tun?

Antwort

19

Rectangle.UNIT ist eine statische Klasseneigenschaft. Es kann immer nur auf das Rectangle-Klassenobjekt zugegriffen werden. Auf Rectangle-Instanzen kann nicht zugegriffen werden.

Rectangle.prototype.UNIT ist eine Prototypeigenschaft und kann auf Instanzen von Rectangle zugegriffen werden.

Wenn Sie eine Klasse Square machen, die von Rectangle erbt, werden alle Instanzen von Square die gleiche Eigenschaft prototype teilen, aber nicht keine statische Klasse Eigenschaften.

Sie können diese Artikel hilfreich (wenn auch vielleicht ein wenig dunkel):

+0

Können Sie dies bitte ein wenig weiter ausführen: "Statische Eigenschaften können zwischen Klassen variieren, die eine bestimmte Prototyp-Vererbungskette gemeinsam haben." – Tarik

+0

Ich habe meine Antwort bearbeitet, um sie zu klären und zu korrigieren. –

1

Rectangle.UNIT ist wie eine Klasse statisches Element, während Rectangle.prototype.UNIT ist ein lokales Mitglied. Sieht so aus, als ob Sie Rectangle.UNIT in Ihrem Fall haben möchten, weil Sie nur eine statische Instanz des Objekts benötigen.

Verwandte Themen