Dopisywanie własnych metod do istniejących obiektów Drukuj
Ocena użytkowników: / 0
SłabyŚwietny 
Wpisany przez Patryk yarpo Jar   
wtorek, 22 września 2009 17:44

Stwórzmy sobie obiekt [String]:

var txt = new String('To jest mój napis');

Obiekt ten posiada kilka metod (funkcji), choćby:

alert(txt.toLowerCase()); // małymi literami

Dodajmy do niego dodatkową metodę:

txt.letterSpacing = function() {

    var n = this.length;

    var str_result = '';

    for(var i=0; i<n; i++) {

        str_result += this.charAt(i) + ' ';

    }

return str_result;
}

Oraz jej wywolanie:

 alert(txt.letterSpacing()); 

Zauważ, że jeśli zaraz za tym wyświetlisz ponownie

 alert(txt); 

Nadal litery są razem. Dzieje się tak dlatego, że nie zmienialiśmy this, a jedynie przysywaliśmy wszystko do str_result a potem to zwróciliśmy.

Wartym zauważenia jest też to, że jeśli dodasz teraz nowy obiekt String, to nie posiada on tej metody:

var nowy_txt = new String('Poszła baba na targ');
alert(nowy_txt.letterSpacing());

Taki kod wywoła błąd:

Błąd: nowy_txt.letterSpacing is not a function

Dlaczego? Dodaliśmy tę metodę dokładnie do tego jednego obiektu, nie do wszystkich obiektów String. To tak jakbyśmy nauczyli czegoś jednego człowieka. Nie możemy później wymagać, aby każdy to potrafił.

Jest jednak i na to sposób, choć o tym w innej poradzie.