Kurs obiektowego JavaScript (24)

Autor: Damian Chodorek • Opublikowany: 14 października 2014 • Ostatnia aktualizacja: 8 lutego 2015 • Kategoria: javascript, kursy

Rozszerzanie funkcjonalności obiektów wbudowanych.

Z poprzednich lekcji dowiedziałeś się, że jeśli dodamy coś do prototype w konstruktorze, to funkcjonalność wszystkich obiektów, które były lub będą tworzone przy jego pomocy, zostanie rozszerzona.

Przykładem może być zaimplementowanie metody inArray(), której zadaniem jest sprawdzenie czy dany element jest w tablicy. Domyślnie taka metoda (lub podobna) nie istnieje w JS’owych tablicach.

Array.prototype.inArray=function(el){
  for( var i=0, l=this.length; i<l; ++i ){
    if( this[i]===el )
      return true;
  }
  return false;
}

var myArr=[1,3,'a','b'];
myArr.inArray('a'); //true
myArr.inArray(55); //false

Jak widzisz w powyższym przykładzie, możemy na standardowej tablicy wywołać nową, zaimplementowaną przez nas metodę. Zanim zdecydujesz się dodawać funkcjonalność do obiektów wbudowanych, sprawdź czy metoda o tej nazwie na pewno nie istnieje. Oczywiście dynamicznie, przy użyciu if.

Jeśli przypiszesz do prototype całkiem nowy obiekt, to obiekty utworzone przed tą operacją nadal będą pamiętać stary obiekt prototype, natomiast wszystkie obiekty utworzone po zmianie, będą widzieć poprawnie nowy (i tylko nowy) obiekt.

function Thing(){ this.name="thing"; }
Thing.prototype.xVal=1;
var t1=new Thing();
Thing.prototype={ yVal:2 }
var t2=new Thing();

t1.xVal; //1;
t1.yVal; //undefined !!!

t2.xVal; //undefined !!!
t2.yVal; //2

W tym artykule to wszystko. Przejdź do następnej części:

Kurs obiektowego JavaScript (25)

Zobacz również
Kurs obiektowego JavaScript (22)Model programowania oparty o prototyp.
Kurs obiektowego JavaScript (23)Wyliczeniowe pola obiektów.
Kurs obiektowego JavaScript (25)Wstęp do dziedziczenia w JS.
Kurs obiektowego JavaScript (26)Dostęp do klasy nadrzędnej. Więcej sposobów dziedziczenia.

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany.