chevron-left chevron-right

Piotr Nalepa Frontend, architektura i AI

[JS] Obiektowe podejście do JavaScript. Jak stworzyć klasę?

Ta wersja
blog.piotrnalepa.pl/2012/03/02/js-obiektowe-podejscie-do-javascript-jak-stworzyc-klase
Opublikowano
Autor
, Staff Software Engineer
Kategoria
JavaScript
Uwagi
Napisz do mnie · Napisz na X

Ten wpis ma 14 lat. Od tego czasu przeglądarki i narzędzia mogły się zmienić, więc zanim użyjesz kodu, sprawdź go z aktualną dokumentacją.

Tematem dzisiejszego artykułu będzie tworzenie klas za pomocą języka JavaScript. Dla wielu może to brzmieć dziwnie z racji popularności biblioteki jQuery, gdzie używa się jej w sposób zupełnie bezklasowy.
Należy jednak uściślić, że w JS klasami są funkcje będące obiektami. Brzmi skomplikowanie?
Po przeczytaniu tego wpisu mam nadzieję, że wszystko będzie nieco jaśniejsze.

Klasy w JS można definiować na kilka różnych sposobów. Każdy z nich ma swoje zalety i wady.

Sekcja 1Klasa jako funkcja

Jest to najpopularniejszy sposób tworzenia klas, zbliżony wyglądem do tradycyjnych klas w językach obiektowych takich jak: PHP czy C++. Tworzenie klas jako funkcji można rozdzielić na 3 podejścia:

  1. Sekcja 1.1Metody klasy są utworzone wewnątrz klasy

    Jest to bardzo popularny sposób definiowania klas. Dzięki temu uzyskujemy strukturę kodu charakterystyczną dla klasycznych klas w programowaniu obiektowym. Nowy obiekt klasy jest wywoływany za pomocą operatora new.

    Przykład 1JavaScript
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    
    function Osoba(imie,wiek) {
    	this.imie = imie;
    	this.wiek = wiek;
    	this.pokazInfo = function() {
    		window.alert(this.imie+' ma '+this.wiek+' lat');
    	}
    }
     
    var jacek = new Osoba('Jacek',39);
    jacek.pokazInfo();
  2. Sekcja 1.2Metody klasy są przypisane do zewnętrznych funkcji

    To podejście pozwala na zdefiniowanie funkcji na zewnątrz klasy. Dzięki temu różne klasy mogą korzystać z tych samych metod jeśli zaistnieje taka potrzeba. Jest to przykład antywzorca.

    Przykład 2JavaScript
    1
    2
    3
    4
    5
    6
    7
    8
    9
    
    function Osoba(imie,wiek) {
    	this.imie = imie;
    	this.wiek = wiek;
    	this.pokazInfo = getItemInfo;
    }
     
    function getItemInfo() {
    	window.alert(this.imie+' ma '+this.wiek+' lat');
    }
  3. Sekcja 1.3Metody klasy są utworzone w prototypie klasy

    Przykład pierwszy pokazał, że można tworzyć klasy ze zdefiniowanymi metodami wewnątrz ciała obiektu. Jest to rozwiązanie wygodne, ale dość kosztowne jeśli chodzi o zarządzanie pamięcią. Dlatego pewnego rodzaju wyjściem może być korzystanie z prototypów klas.

    Przykład 3JavaScript
    1
    2
    3
    4
    5
    6
    7
    8
    
    function Osoba(imie,wiek) {
    	this.imie = imie;
    	this.wiek = wiek;
    }
     
    Osoba.prototype.pokazInfo = function() {
    	window.alert(this.imie+' ma '+this.wiek+' lat');
    }

Sekcja 2Klasa jako obiekt typu singleton

W tym przypadku tworzymy obiekt Javascript bezpośrednio. Funkcjonalność takiej klasy będzie identyczna z tymi zaprezentowanymi wcześniej. Jedyne co się zmieni to fakt, że klasa staje się też obiektem na którym można dokonywać działań i nie można tworzyć wielu obiektów z tej samej klasy. Dlatego jest mowa o wzorcu singleton. Który dba o to, aby nie było więcej niż jeden obiekt danej klasy jednocześnie.

Przykład 4JavaScript
1
2
3
4
5
6
7
8
9
10
var osoba = {
	imie: 'Jacek',
	wiek: 39,
	pokazInfo: function() {
		window.alert(this.imie+' ma '+this.wiek+' lat');
	}
}
 
osoba.imie = 'Placek';
osoba.pokazInfo();

Sekcja 3Podsumowanie

Dzięki stosowaniu klas uzyskujemy odpowiednią przejrzystość kodu, co gwarantuje, że wszystkie wystąpienia klas będą się zachowywały podobnie niezależnie od zmian w metodach klasy. Dodając do tego możliwości biblioteki jQuery i chociażby Canvas API można się pokusić o naprawdę interesujące efekty obiektowego programowania/skryptowania.

Mam nadzieję, że ten artykuł okaże się pomocny i pozwoli Ci rozwinąć swoje umiejętności w projektowaniu aplikacji internetowych.

Udostępnij
Uwagi

O autorze

Staff Software Engineer

Piszę na tym blogu od 2009 roku, a strony i aplikacje webowe tworzę zawodowo od 14 lat. Obecnie w Bishop Fox prowadzę frontend platformy Cosmos, od samego początku projektu. Wcześniej pracowałem m.in. w OLX, KUDO, Auto1 i eZ Systems. Piszę tu o tym, czego nauczyłem się w praktyce: o JavaScripcie, TypeScripcie, Reakcie, CSS-ie i architekturze frontendu. Występowałem też jako prelegent na konferencjach w Polsce i Europie. Masz pytanie albo pomysł na wpis? Daj znać!