| Težave z Array.prototype | ||
|---|---|---|
|
selaz
26. mar 2009 07:18:15
Pridružen od: 1. maj 2007 92 objav 66 2 0 |
#1
Nikakor ne morem pogruntati zakaj naslednja koda ne deluje pravilno: Array.prototype.dummy = function() { String.prototype.dummy = function() { var a = new Array("a", "b", "c"); Koda vrne kot rezultat: function() { return this; }abc pričakoval pa bi izpisati samo abc!!! Če delam s String.prototype stvar dela pravilno. Je imel že kdo take težave, kot sem videl okoli se Array.prototype na veliko uporablja. Testirano na IE6, FF2 LP* |
|
|
Vini
26. mar 2009 09:34:23
Pridružen od: 1. sep 2006 6612 objav 5234 611 56 |
#2
Zakaj tukaj sploh potrebujes to dummy funkcijo? Koda, ki bo izpisala "abc": Pazi, "for (var i in a)" v tvojem primeru ne pride v postev, ker se sprehodi skozi vse propertyje objekta, torej tudi skozi property "dummy" in ja, indeksi arraya so prav tako propertyji v javascriptu. |
|
|
selaz
26. mar 2009 12:10:59
Pridružen od: 1. maj 2007 92 objav 66 2 0 |
#3
dummy je lahko katerakoli dodatna funkcija na Array-ju, ki jo sam napišem, npr. in_array, search, ... for zanka sicer deluje, vendar samo pri numeričnem indeksiranju, če definiram: stvar ne bo tekla. "for (var i in a)" se mi zdi točno tisto kar rabim (brez propertyjev), ker prebere tudi indekse/ključe, vendar je zadeva za moje pojme nekoliko pomanjkljiva. Hvala |
|
|
Vini
26. mar 2009 12:48:22
Pridružen od: 1. sep 2006 6612 objav 5234 611 56 |
#4
Pazi, javascript Array je kar objekt, le da ima se dodaten property .length, ki pove, kako dolg je ta array. Ampak spet pazi, javascript hash (associative) arrayev ne podpira, ko si storil a["x"] = "a", si priredil vrednost propertyju objekta, vrednost .length se zaradi tega ne bo povecala. Problem bi lahko resil takole: Je pa vprasanje, ce je to sprejemljivo zate. Vsekakor moras, ko setiras propertyje, v akeys dodajati se imena teh propertyjev, da se lahko kasneje sprehodis samo po tem. Mogoce bi bilo boljse, ce poves, kaj sploh zelis doseci, pa pogruntamo najbolj optimalen workaround... |
|
|
selaz
26. mar 2009 13:13:20
Pridružen od: 1. maj 2007 92 objav 66 2 0 |
#5
Stvar je sledeča: Imam že kar nekaj napisane kode v JS in na več mestih uporabljam kar "for (var i in a)" sintakso. Želel sem globalno dodati še Array.prototype.in_array (pred tem nisem imel custom funkcij an Array objektu) in stvar se je začela sesuvati. Imam torej dve možnosti: ali povsod preiskati uporabo "for (var i in a)", jo zamenjati in še enkrat stestirati ali pa na mestih kjer rabim in_array vsakič pisati isto kodo. Nobena varianta mi ne diši... če bi tole prej vedel... Mogoče bo pa komu drugemu tole pomagalo, ko bo zažel JS knjižnico pisati. LP |
|
|
Vini
26. mar 2009 13:33:04
Pridružen od: 1. sep 2006 6612 objav 5234 611 56 |
#6
Ja, ni druge, eno od teh dveh moznosti bos moral izbrati, v drugem primeru lahko le naredis funkcijo in_array(), da ne bos pisal ene in iste kode kar naprej :) |
|