Avatar billede lajer Nybegynder
30. marts 2004 - 17:06 Der er 9 kommentarer og
1 løsning

Retuner alle metoder og properties for et object

Hej.

Findes der en måde at retunere alle metoder og properties for et object?
Avatar billede skovenborg Nybegynder
30. marts 2004 - 17:10 #1
sådan at du får navnet på dem eller hva' mener du?
Avatar billede lajer Nybegynder
30. marts 2004 - 17:12 #2
Lige præcis ja.

Eventuelt hvilke argumenter en metode tager også... Hvis dette er muligt. Tvivler jeg dog meget på ;)
Avatar billede arne_v Ekspert
30. marts 2004 - 17:19 #3
Du spørger med andre ord om man kan lave reflection i JavaScript ...
Avatar billede skovenborg Nybegynder
30. marts 2004 - 17:20 #4
jeg lavede en gang noget lignende:
<script type="text/javascript">
  function print_r(arr,out)
  {
    out = (out != undefined) ? out : true;
    var output = "";
    // Private function to print out one single array
    function print_array(arr)
    {
                output += "Array\n(\n\t";
        for (i in arr)
        {
            output += " ["+i+"] => ";
            if (is_array(arr[i])) print_array(arr[i]);
            else output += arr[i]+"\n";
        }
        output += " )";
        return output;
    }
        if (arr != null)
        {
    var output = (typeof arr == "number" || typeof arr == "boolean" || typeof arr == "string") ? arr : print_array(arr);
    if (out) document.write(output);
    else return output;
    }
        else return "";
  }
  function is_array(arr)
{
    if (arr != null && arr.constructor)
    {
        if (arr.constructor.toString().indexOf(" Array()") != -1) return true;
        else return false;
    }
    else return false;
}

</script>

<body onload="print_r(document.getElementById('elm'));">
<div id="elm">HEj</div>
</body>

Virker ikke helt i opera og kan give nogle mærkelige fejl en gang imellem, men ellers skulle den gerne være en del af det du søger. Jeg regner selvfølgelig ikke med du vil bruge den direkte på en hjemmeside ;-)
Avatar billede lajer Nybegynder
30. marts 2004 - 17:22 #5
Fint fint =)

Læg et svar, så er der point!
Avatar billede skovenborg Nybegynder
30. marts 2004 - 17:25 #6
is_array() kunne også laves mere enkelt fx arr instanceof Array - men det virkede ikke i IE :(

Argumenterne på funktionerne må du slå op på nettet - javascript kan ikke umiddelbart finde ud af hvad de forskellige bruges til.

Forresten tager print_r (lidt dumt navn måske - da den ikke fungerer præcis ligesom PHP's funktion af samme navn) et ekstra argument. Hvis du skriver:
print_r(document.getElementById('elm'),false);
kommer der ikke noget output og den returnerer en streng med samme indhold i stedet. Brugbart hvis du ikke vil have at siden skal overskrives.
Avatar billede skovenborg Nybegynder
30. marts 2004 - 17:26 #7
okay - værsgo' :-) Håber du får glæde af den.

hvis du har mozilla eller firefox findes der også en DOM Inpector - faktisk dejlig at finde ud af hvilke properties og methoder der findes (men selvfølgelig virker ikke alle sammen i alle browsere, da de jo er til mozilla)
Avatar billede skovenborg Nybegynder
30. marts 2004 - 17:27 #8
her er så et rigtigt svar :-)
Avatar billede olebole Juniormester
30. marts 2004 - 17:57 #9
<ole>

Hvis det er til debugging, er denne somregel nok:

var o = {"et":"tal", "to":"et andet tal"};
for ( x in o ) {
  alert(x + " => " + o[x]);
}

/mvh
</bole>
Avatar billede roenving Novice
30. marts 2004 - 18:38 #10
-- og en, jeg har klippet herinde til html-elementer:

<html><body>
<select name="test2">
    <option value="xx">xx</option>
    <option value="xxx">xxx</option>
</select>
<a STYLE="background:transparent;color:#246374;">tekst</a>
<img src="./billede.jpg" width="100" height="100" name="fisk" style="filter:alpha(opacity=60);-moz-opacity:0.6;" onMouseOver="startOpChange(this,100,1);" onMouseOut="startOpChange(this,60,1);">

<script type="text/javascript">
n = 0;
document.write("<pre>");
z=document.getElementsByTagName('IMG')[0].style;
for(x in z) {
document.writeln("document.getElementsByTagName('IMG')[0].style."+x+"\t"+z[x]);
n++
}
document.write("</pre>");
alert(n);
</script></body></html>

-- og du kan ændre hvilket html-element, som bruges ved at lave linjen med z om f.eks. til:

z=navigator;//document.getElementsByTagName('IMG')[0].style;

-- og tilsvarende lave om i .writeln-linjen !-)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester