2015-10-08 15 views
24

Jestem częścią małej grupy analitycznej w pracy, która stara się lepiej zrozumieć, co powoduje, że JavaScript działa. W naszych ostatnich dyskusjach na temat obiektów dowiedzieliśmy się, że publiczne metody obiektu są odtwarzane za każdym razem, gdy obiekt jest tworzony, podczas gdy metody przypisane do prototypu obiektu są tworzone tylko raz i dziedziczone przez wszystkie instancje. Z tego, co rozumiem, zarówno publiczne metody, jak i metody przypisane do prototypu są publicznie dostępne.Dlaczego warto używać publicznych metod w obiektach JavaScript?

Mam zatem pytanie, po co w ogóle tworzyć publiczne metody, jeśli dodanie do prototypu jest najwyraźniej bardziej wydajne? Jakie korzyści zapewnia metoda publiczna, której prototyp nie zapewnia?

+0

Prototype dodatek do obiektu tworzy tę samą metodę do innych obiektów tej samej klasy (w tym przypadku funkcji), aby być dodany. na przykład jeśli mam 'var name = new Student()' i dodałem prototyp do nazwy byłoby dostępne dla 'var name2 = new Student()' oraz –

+1

@AkshayKhandelwal Zakładając, że OP oznacza wykonanie 'this.GetName = function() {...} 'wewnątrz konstruktora' Studenta', możesz uzyskać do niego dostęp także z obu, jednak jest "odtworzony za każdym razem". –

+1

Kolejne podobne pytanie: [Zalety korzystania z prototypu, a czy definiowanie metod bezpośrednio w konstruktorze?] (Http://stackoverflow.com/questions/4508313/advantages-of-using-prototype-vs-definining-metrical-rightight-in -the-constructor? rq = 1) –

Odpowiedz

24

Odpowiadając na to konkretnie:

Jakie korzyści ma metoda publicznych przewiduje, że prototyp nie?

Sposób dodanej wewnątrz konstruktora ma dostęp do prywatnych informacji, np

function Student() { 
    var name = 'Bob'; 
    this.GetName = function() { 
     return name; 
    } 
} 

Student.prototype.SomeOtherPublicMethod = function() { 
    //no access to name 
} 
+0

To ma sens, @ James Thorpe. – AurumPotabile

+0

Chyba że zawiniesz "klasę" w funkcję samo-wykonującą i przeniesiesz prywatne metody i pola z konstruktora. – Kroltan

+0

@Kroltan Chciałbym zobaczyć, jak konstruujesz coś takiego, gdzie metody prototypowe mają dostęp do zmiennych prywatnych, ale każda instancja obiektu ma własne dane. (naprawdę, bez sarkazmu ...!) –