2009-08-31 12 views
10

Lubię uczyć się różnicę między klasa własności i prototyp w JavaScript, co mam na myśli jest pokazany w kodzie:Różnica pomiędzy właściwościami klasy i prototyp funkcji w JavaScript

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

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

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

Rzecz wiem jest prototyp działa jak dziedziczy obiekt, co oznacza, że ​​JEDNOSTKA będzie od teraz pokazywana wszystkim instancjom, ale kod Rectangle.UNIT = new Rectangle(1, 1); nie robi tego samego? Właściwość klasy

Odpowiedz

19

Rectangle.UNIT jest właściwością klasy statycznej. Dostęp do niego można uzyskać tylko na obiekcie klasy Rectangle. Nie będzie dostępny na żadnych wystąpieniach prostokąta.

Rectangle.prototype.UNIT to prototypowa właściwość, do której można uzyskać dostęp w wystąpieniach prostokąta.

Jeśli się klasę, która dziedziczy z SquareRectangle, wszelkie przypadki Squarepodzieli tę samą właściwość prototype, ale nie jakieś statyczne właściwości klasy.

mogą znaleźć te artykuły pomocne (choć może trochę niejasne):

+0

Czy możesz rozwinąć to nieco bardziej proszę: "Właściwości statyczne mogą się różnić między klasami, które mają dany prototyp łańcucha dziedziczenia." – Tarik

+0

Edytowałem swoją odpowiedź, aby wyjaśnić i poprawić. –

1

Rectangle.UNIT jest jak klasy członka statycznego, natomiast Rectangle.prototype.UNIT jest lokalnym członkiem. Wygląda na to, że chcesz Rectangle.UNIT w twoim przypadku, ponieważ potrzebujesz tylko jednej statycznej instancji obiektu.

Powiązane problemy