Ta strona używa ciasteczek (cookies), dzięki którym nasz serwis może działać lepiej. Dowiedz się więcej OK, rozumiem

prototype po co to komu

Tworzenie dynamicznych stron internetowych z zastosowaniem JavaScript, jQuery, Ajax. Dowiedz się jak to zrobić, znajdź rozwiązania swoich problemów.

prototype po co to komu

Post 21.02.2018, 11:24:57

Witam
jak działa prototype wiem ale zastanawiam się nad sensem jego stosowania.
Kod: Zaznacz cały
function Base (name){
  this.name = name;
}
Base.prototype.getName = function (){
  return this.name + 'dobry';
}
var test = new Base('dzien');
document.getElementById('result').innerHTML = test.getName();

można przecież tak
Kod: Zaznacz cały
function Base (name){
  this.name = name;
  this.getName = function (){
  return this.name + ' dobry';
}
}
/*Base.prototype.getName = function (){
return this.name + ' dobry';}*/
var test = new Base('dzien);
document.getElementById('footer').innerHTML = test.getName();

Z tego co rozumiem do tej pory
Przeszukiwanie metod umieszczonych w prototype jest wolniejsze ale za to zabiera mniej zasobów bo dana metoda jest w jednym miejscu a nie w każdej instancji.
Tworzenie instancji i dodanie metody już po utworzeniu jest szybsze niż z metodami.
Powyższe informacje zaczerpnąłem z internetu informacje poparte testami.

I właściwie to tyle co mogę powiedzieć bo nie wiem po co je stosować w praktyce czyli w rzeczywistym kodzie, poco tworzyć obiekt a potem dodawać metody gdzieś w środku kodu.
jeżeli stworze "moduł" to wszystko jest opakowane więc po co stosować prototype.
Pomijam w moich rozważaniach oszczędności zasobów,hmm a może to jednak ma znaczenie?
sasiadstar
Posty: 134
Dołączył(a): 26.08.2016

Re: prototype po co to komu

Post 21.02.2018, 12:18:42

W każdym przypadku idziesz na jakiś kompromis - zużycie pamięci vs wydajność vs łatwość w zarządzaniu vs większe możliwości zrobienia czegoś.

Jak zauważyłeś, jedną z podstawowych zalet prototypów jest oszczędność pamięci - masz 1 instancje prototypu do której linkują wszystkie instancje obiektu. Ale oszczędność wystąpi dopiero wtedy, gdy utworzyć conajmiej 2 instancje obiektu z danym prototypem.

Tworzenie instancji i dodanie metody już po utworzeniu jest szybsze niż z metodami.
Powyższe informacje zaczerpnąłem z internetu informacje poparte testami.

masz na mysli, że dodanie metody do instancji wewnątrz konstruktora jest szybsze niż utworzenie instancji z wcześniej zdefiniowanym prototypem? Nie badałem, jeśli tak twój research wykazał, to może tak jest, choć ja spodziewałbym się odwrotnie.

jeżeli stworze "moduł" to wszystko jest opakowane więc po co stosować prototype.

nie do końca rozumiem co masz na myśli. Prototyp daje ci "szablon" do tworzenia wielu obiektów o wspólnych cechach. Jeśli masz zamiar utworzyć tylko jedną instancję, to może rzeczywiście nie ma sensu tworzyć konstruktora tylko od razu moduł, który eksportuje obiekt z pewnymi metodami.

Prototypy dają ci jeszcze tę zaletę, że oferują dziedziczenie, więc możesz zgrupowac pewną funkcjonalność w jednym prototypie, a potem szczególne funkcjonalności w prototypie potomnym. Jak często korzysta się z dziedziczenia? To zależy od projektu. Jest wiele frameworków, które bazują akurat na dziedziczeniu.

Z drugiej strony, dodawanie funkcjonalności wewnątrz konstruktora pozwala Ci tworzyć imitację prywatnych własności (bo możesz definiować zmienne zamknięte w zasięgu konstruktora, z których te metody mogą korzystać) - czyli zyskujesz nowe możliwości kosztem zużycia pamięci (jeśli bierzemy pod uwagę, że chcesz tworzyć więcej niż 1 instancję danego obiektu).
Avatar użytkownikakuku
Rafał Kukawski

+∞
+∞

Posty: 19767
Dołączył(a): 14.04.2002

Re: prototype po co to komu

Post 21.02.2018, 12:50:51

kuku napisał(a):masz na mysli, że dodanie metody do instancji wewnątrz konstruktora jest szybsze niż utworzenie instancji z wcześniej zdefiniowanym prototypem? Nie badałem, jeśli tak twój research wykazał, to może tak jest, choć ja spodziewałbym się odwrotnie.

Źle to opisałem chodzi mi dokładnie o to co napisałeś.

Ogólnie tak sobie rozmyślam jak poukładać mój kod który działa ma się dobrze ale nie opiera się na na obiektach jako takich (pomijam że wszystko jest obiektem)
Do tej pory omijałem obiektowke jak tylko się da, zresztą moje projekty raczej są proste i na ogół w jquery (z racji prostoty), tym razem jest to aplikacja na androida postanowiłem więc że się wezmę w obroty i napiszę to "po ludzku" i czystym js na ile to będzie możliwe.
Powiem szczerze to nie wiem od czego zacząć na razie trenuje różne sposoby konstrukcji kodu żeby znowu nie narobić spagetti.

W moim przypadku to chyba zużycie pamieć będzie kluczowe szkoda zasobów smartfona aplikacja jest w zasadzie statyczna (pobieranie i analiza danych co parę minut)
sasiadstar
Posty: 134
Dołączył(a): 26.08.2016

Re: prototype po co to komu

Post 21.02.2018, 18:27:17

Prototyp jest czymś, co zastępuje funkcjonalność klasy. Można szukać aspektów wydajnościowych, wygody itd., ale to korzyści wtórne. Po prostu w JS nie ma klas (w najnowszych wersjach ES klasy są tylko "lukrem składniowym").
Prototyp jest zbiorem właściwości, które mają obiekty korzystające z prototypu, tak jak klasa jest definicją właściwości, które mają zawierać obiekty jej typu. Jest to coś na kształt właśnie "ułomnej klasy".
Pomijanie paradygmatu obiektowego w JS jest dość słabe, ponieważ JS jest całkowicie obiektowy. Poza tym to jest po prostu wygodne. Metoda do funkcji ma się tak:
Przykład: Chcesz wykonać coś na obiekcie x.
Funkcja:
wykonaj(x, arg);
Metoda obiektu:
x.wykonaj(arg);

Nie mówiąc o tym, ze często argumenty funkcji w programowaniu obiektowym są składnikami danego obiektu, więc wtedy nie trzeba pilnować niczego
x.wykonaj () //w ciele funkcji używa this.arg.
kabexxx
Posty: 212
Dołączył(a): 27.11.2011


Powrót do JavaScript


 


  • Podobne wątki
    Odpowiedzi
    Wyświetlone
    Ostatni post

Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 1 gość

Hosting, Domeny, SSL

Subskrypcja

Mamy 51441 zarejestrowanych użytkowników.
Najnowszy użytkownik: jonman65


Nasi użytkownicy napisali:

  • 937706 wiadomości
  • w 247435 tematach

Najnowsze wpisy na blogu

Najnowsze artykuły

Najaktywniejsi (ostatnie 30 dni)