Avatar billede nyp Nybegynder
17. juli 2005 - 01:23 Der er 5 kommentarer og
1 løsning

Kald af function i object

Jeg har en function i classen 'myFunction' som jeg gerne vil kalde fra forskellige elementer oprettet af forskellige objekter, det lyder vist lidt indviklet, håber nedenstående eksempel bedre illustrerer mit problem.

Det jeg ønsker er at når der klikkes på det røde felt så kaldes red.showResult(); og når der klikkes på det blå felt så kaldes blue.showResult(); jeg kunne selvfølgelig skrive if (this.id==’red’) red.showResult(); osv. men da jeg ikke nødvendigvis ved hvad objektet hedder så er det ikke så god en løsning, så hvis der er nogen der har en ide vil jeg være taknemlig.

<html>
<head>
<title>Test js</title>

<SCRIPT>

  var myFunction = function()
  {
    this.id="";
    this.farve="red";
    this.obj="red";
    this.result="";
  }

  myFunction.prototype.init = function()
  {
    this.obj=document.getElementById(this.obj);
    this.obj.style.width="10em";
    this.obj.style.height="10em";
    this.obj.style.backgroundColor=this.farve;

// ********* det vigtige! **************
    this.obj.id=this.id;
// dette virker ikke:  this.obj.onmousedown=this.id+".showResult();";
    this.obj.onmousedown=function() {

// virker ikke:      this.showResult();
if (this.id=='red')    red.showResult();
if (this.id=='blue')  blue.showResult();
    }
// *************************************
  }

  myFunction.prototype.showResult = function()
  {
    alert(this.result);
  }

  function start()
  {
    red=new myFunction();
    red.result="YES RØD! ";
    red.id="red";
    red.init();
   
    blue=new myFunction();
    blue.farve="blue";
    blue.obj="blue";
    blue.result="YES BLÅ!";
    blue.id="blue";
    blue.init();
  }
  onload=start;
</SCRIPT>

</head>

<BODY>
<div id="red"></div>
<div id="blue"></div>

</BODY>
</html>
Avatar billede roenving Novice
17. juli 2005 - 01:48 #1
Tjah, man skal nogle små omveje, når man skal funktionstildele, og så brokkede den sig over objekt-variabel-navnene, hvis ikke de blev deklareret:

<script type="text/javascript">

  function myFunction(){
    this.id = "";
    this.farve = "red";
    this.obj = "red";
    this.result = "";
  }
  myFunction.prototype.init = function(){
    this.obj=document.getElementById(this.obj);
    this.obj.style.width = "10em";
    this.obj.style.height = "10em";
    this.obj.style.backgroundColor = this.farve;
    var myF = this;
    this.obj.onmousedown = function(){myF.showResult()}
  }
  myFunction.prototype.showResult = function(){
    alert(this.result);
  }
  window.onload = function(){
    var red = new myFunction();
    red.result = "YES RØD! ";
    red.id = "red";
    red.init();
   
    var blue = new myFunction();
    blue.farve = "blue";
    blue.obj = "blue";
    blue.result = "YES BLÅ!";
    blue.id = "blue";
    blue.init();
  }
</script>

-- uden variabel-deklarationen virkede det med f.eks. red1 og blue1 ...
Avatar billede nyp Nybegynder
17. juli 2005 - 02:04 #2
ak, så enkelt! det er perfect, takker :) smider du et svar.
Avatar billede roenving Novice
17. juli 2005 - 02:07 #3
Velbekomme '-)

-- og specielt skal du selvfølgelig lægge mærke til den tildeling til en variabel, som objektet er igennem for at få den anonyme funktionstildeling til at fungere ...
Avatar billede nyp Nybegynder
17. juli 2005 - 02:11 #4
Jeg har et godt øje på den, det var lige den jeg manglede ;-)
Avatar billede roenving Novice
17. juli 2005 - 02:20 #5
-- og så i forhold til constructoren:

-- nu ved jeg ikke, hvilken programmeringskontekst du kommer fra, men i javascript kan man lave hvad der kommer i nærheden af c-familiens overloading med bare een constructor, fordi der ingen krav til parameter-konsistens er, så du kunne skrive din constructor sådan:

  function myFunction(id,result,farve,obj){
    this.id = id?id:"";
    this.farve = farve?farve:"red";
    this.obj = obj?obj:"red";
    this.result = result?result:"";
  }

-- og konstruere dine to objekter således:

    var red = new myFunction("red","YES RØD! ");
    red.init();
   
    var blue = new myFunction("blue","YES BLÅ!","blue","blue");
    blue.init();

-- f.eks. i php kan man jo gøre det samme ved at sætte default-værdi i parameterlisten ...
Avatar billede roenving Novice
17. juli 2005 - 02:21 #6
-- og tak for point ;~}
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