Poradnik Webmastera

Kanał ATOM

Zapisz się na darmowy newsletter:
E-mail:

Imię:

Zgadzam się z Polityką Prywatności

Po zapisaniu się otrzymasz ten ebook:
Jak zwiększyć ruch na stronie WWW? 120 praktycznych wskazówek
Pozycjonowanie dzięki:
Darmowe Pozycjonowanie
Valid XHTML 1.0 Strict
Poprawny CSS!

Tworzenie własnych obiektów - Kurs języka JavaScript

<< Wstecz
Tablice i obiekty
^^ Spis treściDalej >>
Data i czas (obiekt Date)

W lekcji Tablice i obiekty opisałem ogólnie co to są obiekty i w jaki sposób można korzystać z tych które są udostępniane przez przeglądarkę internetową. Język JavaScript pozwala też na tworzenie własnych obiektów, i temu zagadnieniu poświęcona będzie ta część kursu.

Do stworzenia obiektu używa się funkcji - konstruktora. Jej jedyną cechą specjalną jest to że musi się nazywać tak samo jak tworzony obiekt. Do utworzenia instancji obiektu należy potem użyć tak jak zazwyczaj operatora new:

function Punkt()
{
}
 
var p = new Punkt();

Funkcja - konstruktor może też przyjmować parametry, przy pomocy których można np. zainicjować pola obiektu. Robi się to analogicznie jak tworząc nowe właściwości w już istniejących egzemplarzach obiektów - wystarczy przypisać wartość do właściwości którą chce się utworzyć. Ponieważ bieżący egzemplarz obiektu jest zawsze dostępny pod słowem kluczowym this, należy go użyc aby utworzyć właściwości:

function Punkt(x, y)
{
    this.x = x;
    this.y = y;
}
 
var p = new Punkt(10, 20);
alert("Współrzędne punktu to (" + p.x + "," + p.y + ")");

Poza właściwościami obiekt może też udostępniać metody (funkcje). Tworzy się je prosto - najpierw należy napisać funkcję, i następnie przypisać ją tak jak właściwości do obiektu. W funkcji takiej można odwołać się do bieżącej instancji obiektu za pomocą słowa kluczowego this. Przy tworzeniu takich funkcji polecam podać nazwę klasy jako prefiks nazwy (lub też inaczej je rozróżnić), tak aby od razu wiadomo było która funkcja należy do której klasy.

function Punkt_wypiszWspolrzedne()
{
    alert("Współrzędne punktu to (" + this.x + "," + this.y + ")");
}
 
function Punkt(x, y)
{
    this.x = x;
    this.y = y;
    this.wypiszWspolrzedne = Punkt_wypiszWspolrzedne;
}
 
var p = new Punkt(10, 20);
p.wypiszWspolrzedne();

Można też skorzystać z faktu że JavaScript pozwala na tworzenie funkcji anonimowych, które można od razu przypisać jako metody do obiektu:

function Punkt(x, y)
{
    this.x = x;
    this.y = y;
    this.wypiszWspolrzedne = function()
    {
        alert("Współrzędne punktu to (" + this.x + "," + this.y + ")");
    }
}
 
 
var p = new Punkt(10, 20);
p.wypiszWspolrzedne();

Przy tworzeniu własnych obiektów warto także utworzyć specjalną funkcję o nazwie toString(). Ta funkcja będzie wywoływana za każdym razem gdy zajdzie konieczność konwersji obiektu na string.

function Punkt_toString()
{
    return "(" + this.x + "," + this.y + ")";
}
 
function Punkt(x, y)
{
    this.x = x;
    this.y = y;
    this.toString = Punkt_toString;
}
 
var p = new Punkt(10, 20);
alert("Współrzędne punktu to " + p);

Po utworzeniu metody toString() można oczywiście wywołać ją także z innych metod klasy gdy zajdzie taka potrzeba. Można też wykorzystać fakt że język sam ją wywoła gdy będzie potrzeba, i po prostu skorzystać z możliwości tej niejawnej konwersji obiektu dostępnego poprzez słowo kluczowe this na string:

function Punkt_toString()
{
    return "(" + this.x + "," + this.y + ")";
}
 
function Punkt_wypiszWspolrzedne()
{
    alert("Współrzędne punktu to " + this);
}
 
function Punkt(x, y)
{
    this.x = x;
    this.y = y;
    this.toString = Punkt_toString;
    this.wypiszWspolrzedne = Punkt_wypiszWspolrzedne;
}
 
var p = new Punkt(10, 20);
p.wypiszWspolrzedne();

Każda klasa posiada także właściwość o nazwie prototype. Za jej pomocą można dodawać nowe właściwości i metody do już istniejących obiektów - zarówno tych utworzonych przez użytkownika, jak i tych wbudowanych w język:

String.prototype.KOMUNIKAT = "Komunikat: ";
String.prototype.podwoj = function() { return this + " " + this; }
 
var s = "Ala ma kota!";
alert(s.KOMUNIKAT + s.podwoj());

Istnieje też druga właściwość o nazwie constructor, która pozwala odwołać się do funkcji - konstruktora używanej to tworzenia obiektu. Można to np. użyć do sprawdzenia z obiektem jakiej klasy mamy do czynienia:

var x = "1" * 1;
if (x.constructor == String)
    alert("To jest string");
else
    alert("To nie jest string");

Ponieważ konstruktor jest również obiektem, więc posiada on też właściwość prototype. Można się do niej odwołać i dodać z jej użyciem kolejne właściwości i metody. W ten sposób można uzyskać znane z innych języków programowania składowe statyczne klasy (składowe które są przypisane do klasy, ale nie do obiektów które zostały utworzone na jej podstawie).

String.constructor.prototype.KOMUNIKAT = "Komunikat: ";
String.constructor.prototype.podwoj = function(s) { return s + " " + s; }
 
alert(String.KOMUNIKAT + String.podwoj("Ala ma kota!"));


Wykop tą stronę! >>> dodajdo.com
<< Wstecz
Tablice i obiekty
^^ Spis treściDalej >>
Data i czas (obiekt Date)
Ile masz lat?
8 lub mniej
9 - 12
13 - 16
17 - 20
21 - 26
27 - 35
36 - 50
51 lub wiecej
Pokaż wyniki

"Magazyn INTERNET" to miesięcznik poświęcony w całości globalnej sieci komputerowej. Prezentuje aktualności internetowe, praktyczne porady związane z sieciami komputerowymi, kursy dla webmasterów,...
Magazyn Internet - zobacz teraz!

Helion.pl
Tylko dzisiaj!
Zaoszczędzisz 30%!

Joomla! System zarządzania treścią
Cena: 30.8 zł 44 zł

Po prostu FrontPage 2002/XP PL
Cena: 55 zł

PHP5. Tajniki programowania
Cena: 79 zł

PHP. 101 praktycznych skryptów. Wydanie II
Cena: 34 zł
Efect | Darmowe tapety na komorke | APARTAMENT SOPOT | księgarnia | Zakłady Sportowe | TAPETY na pulpit | Mrągowo | gimnazjum nr 1 w Nowym Sączu | Tede | Fundusze emerytalne

Page copy protected against web site content infringement by Copyscape
Copyright © 2003-2008 Daniel "Sir Zooro" Frużyński
Powielanie i dalsze rozpowszechnianie bez zezwolenia zabronione