Rozszerzanie typu obiektu

W poradzie dotyczącej dodawania nowych metod do istniejących obiektów wspomniałem, że da się dodawać metody do wszystkich obiektów – nie tylko do tego jednego wybranego.

Przykładowy kod

[javascript]String.prototype.letterSpacing = function()
{
    var n = this.length;
    var str_result = '';
    for(var i=0; i < n; i++)
    {
        str_result += this.charAt(i) + ' ';
    }
    return str_result;
}[/javascript]

W powyższym kodzie dodaliśmy nową metodą do wszystkich obiektów tworzonych według prototypu obiektu String. Dzięki temu, każdy obiekt String będzie posiadał tę metodę:

[javascript]var oNapis1 = new String("Mój pierwszy napis");
var oNapis2 = new String("Kolejny tekst");

alert(oNapis1.letterSpacing());
alert(oNapis2.letterSpacing());[/javascript]

Gdyby teraz do jednemu z tyhc obiektów nadpisać metodę `letterSpacing’:

[javascript]oNapis1.letterSpacing = function()
{
    return this.toLowerCase(); // zwraca wszystko małymi literami
}
alert(oNapis1.letterSpacing());alert(oNapis2.letterSpacing());[/javascript]

Pierwszy alert da w wyniku to, co zakodowaliśmy w definicji `letterSpacing’ przypisanej do prototypu obiektu String. Drugi alert wyświetli wynik działania metody nadpisanej (czyli toLowerCase()).

Zrozumienie tego początkowo nie jest łatwe, ale można się w końcu przyzwyczaić.

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *