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

Objekts funktion ind på onload

Hvordan dælen får man et object til at smide en af objektets funktioner ind på onload, eller en anden event ?
Jeg har vedlagt et lille eksempel som gerne skulle vise hvad det er jeg vil.
Eneste krav til browser er IE6+

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
    <title>Untitled</title>
    <script type="text/javascript">
    function obj(){
        this.parameters=arguments;
        this.speak=function(){
            alert(this.parameters[0]);
        }
        onload = this.speak; //
    }
    var test = new obj('Der er mig der snakker');
    var test2 = new obj('Der er mig der snakker 2');
</script>
</head>
<body>

</body>
</html>
Avatar billede lajer Nybegynder
30. marts 2004 - 17:18 #1
Hvorfor bruger du this i en funktion?

Anyways, går ud fra at du vil lave et object, så prøv dette:

obj = {
  speak : function()
          {
                alert()
          }
}
window.onload = obj.speak;
Avatar billede olebole Juniormester
30. marts 2004 - 17:34 #2
<ole>

lajer >> Det er en object-constuctor - som spørgeren også skriver  :)

-mundi- >> Er det window.onload-event'en du vil lægge noget på ... eller(?)

/mvh
</bole>
Avatar billede olebole Juniormester
30. marts 2004 - 17:41 #3
Anyway ... i callback-funktioner henviser 'this' til objektet, der udløser event'en. Du skal i stedet oprette en variable, der i objektets 'instantierings-øjeblik' peger på objektet selv - og så referere til denne variabel i callback-funktionen. F.eks:

function obj() {
    var oMe = this;
    this.parameters=arguments;
    this.speak=function(){
        alert(this.parameters[0]);
    }
    window.onload = oMe.speak; //
}

Var det mon ikke det, du mente?  :)
Avatar billede olebole Juniormester
30. marts 2004 - 17:45 #4
Oooops .... sådan, naturligvis:

function obj() {
    var oMe = this;
    this.parameters = arguments;
    this.speak = function() {
        alert( oMe.parameters[0] );
    }
    window.onload = this.speak; //
}
Avatar billede olebole Juniormester
30. marts 2004 - 17:48 #5
... og kalder du en anonym funktion på onload-event'en:

function obj() {
    var oMe = this;
    this.parameters = arguments;
    this.speak = function() {
        alert( this.parameters[0] );
    }
    window.onload = function() {
        oMe.speak();
    }
}

... undskyld, jeg fik byttet op og ned på tingene i første eksempel  :)
Avatar billede -mundi- Nybegynder
30. marts 2004 - 19:31 #6
super kigger på det når jeg kommer på arbejde :-)
Avatar billede -mundi- Nybegynder
30. marts 2004 - 19:31 #7
hov smid lige et svar Olebole
Avatar billede olebole Juniormester
30. marts 2004 - 21:35 #8
hov ... det gør jeg da lige  ;o)
Avatar billede -mundi- Nybegynder
30. marts 2004 - 21:41 #9
Tak for hjælpen, har siddet og fået grå hår i et pænt stykke tid :-)
Avatar billede olebole Juniormester
30. marts 2004 - 21:50 #10
Hehe ... ja, OOP kan være lidt svært i begyndelsen - men det er en fantastisk måde at programmere på i længden.
Når man begynder at OOP'e, har man tilbøjelighed til at lave overkill (for en mand med en ny hammer, kommer alt til at ligne søm) - men når den første begejstring har lagt sig, falder man normalt ind i en fornuftig rutine.
Det er jo ikke altid, det er en fordel med OOP - men når det er, er det somregel en _kæmpe_ fordel  ;o)

... og jeg takker naturligvis for points
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