Skip navigation.

Michał Zięba | devBlog

Najtrwalszymi zasadami wszechświata są przypadek i błąd...

JavaScript i prototype

Ostatnio musiałem sobie w JavaScript napisać funkcję in_array (znaną Wam dobrze choćby z php).
Na początku oczywiście najprostszą metodą osiągnąłem
function in_array(array, value)
{
   for (var i=0; i<array.length; ++i) {
      if (array[i] == value)
         return true;
   }
   return false;
}

// test
var numbers = new Array(2, 3, 5, 7, 11, 13, 17);
alert(in_array(numbers, 3)); // true
alert(in_array(numbers, 4)); // false


Można to jednak zrobić lepiej i bardziej elegancko.

Co daje nam prototype? Ano pozwala odnieść się bezpośrednio do klasy obiektów. Czyli wprowadzając jakąś nową funkcjonalność od tej pory każdy obiekt tej klasy będzie ją posiadał.

Dla naszego przykładu z funkcją in_array():
Array.prototype.in_array = function (value)
{
   var length = this.length;
   for (var i=0 ; i<length; ++i) {
      if (this[i] == value)
         return true;
   }
   return false;
}

// test
var numbers = new Array(2, 3, 5, 7, 11, 13, 17);
alert(numbers.in_array(3)) // true
alert(numbers.in_array(4)) // false

Czyli od teraz każdy obiekt klasy Array posiada metodę (wcześniej mieliśmy "tylko" funkcję) in_array().

Znaczy się wszystko działa ;-)

Kodos i RegExpColor Palette Generator

Comments

Anonymous 13. July 2008, 23:32

ironeczek writes:

thx dobrze ze to napisales bo szukalem gdzies dobrego opisu zastosowan funkcji prototype a jak to mowia lepszy jeden przyklad od.......

Anonymous 27. November 2008, 21:13

Anonymous writes:

function in_array(array, value)
{
return array.indexOf(value)!=-1;
}

How to use Quote function:

  1. Select some text
  2. Click on the Quote link

Write a comment

Comment
(BBcode and HTML is turned off for anonymous user comments.)

If you can't read the words, press the small reload icon.


Smilies

Download Opera, the fastest and most secure browser