Cytat(AdIoS_Neo @ 10.06.2012, 20:53:58 )

Inaczej tego nie obejdziesz niestety, tak w ogóle w JavaScript nie ma tablic asocjacyjnych jak wcześniej napisałeś, a pętla powinna Ci wypisać także jedną metodę którą dodałeś, jeśli tego nie robi to jest gdzieś błąd.
Faktycznie jest jakaś niespójność i nie wiem skąd się bierze.
Przypadek a: localhost - jedna metoda dodanaArray.prototype["f"] = function(){}
var x = [1,2]
for (var i in x) console.log(x[i]);
Rezultat firebug:
0 1
1 2
1,2
Przypadek b: localhost - dwie metodyArray.prototype["f"] = function(){}
Array.prototype["g"] = function(){}
var x = [1,2]
for (var i in x) console.log(x[i]);
Rezultat firebug:
0 1
1 2
test function()
__proto__ []
constructor [undefined]
prototype []
1,2,function()
Przypadek c:http://jsbin.com/acozus/edit#javascript,html,livei tu już wszystko jest jak powinno, czyli odrazu metody sie pojawiają jako elementy w pętli.
Na chromie jest podobnie na moim localhoscie. Jakieś pomysły?

Cytat(kamil4u @ 10.06.2012, 22:50:56 )

Bo w praktyce rzadko się używa prototype do obiektów globalnych( Array, HTMLElement, itd. ) - przynajmniej ja tak robię

Używałbym w takim przypadku metody a'la jQuery, czyli tworzenie własnego obiektu i manipulowanie dopiero nim.
Czyli w przykładzie jQuery mamy $(...).operacja(); , a nie operacje bezpośrednio na elementach DOM( HTMLElement.prototype.operacja = .... ).
Kod
var tablica = ....;
mojObiektObslugującyTablice( tablica ).x();
mojObiektObslugującyTablice( tablica ).y();
Zgadza się wszystko, jednak naturalnym miejscem dla metod do manipulacji na samej tablicy, dobrze by był to ten obiekt - biorąc pod uwagę że posiada "wiedzę" potrzebną do wykonania takiego zobowiązania. Po prostu było by to gromadzenie jednego rodzaju operacji w jednej "klasie".