Problem med this pointer i window.setInterval()
Mit problem er forklaret og demonstreret på engelsk her:http://212.242.222.71/problem.htm
Siden kan ikke ses i NS4 da jeg bruger innerHTML.
Den er en forenkling af en anden side med samme problem, og har ingen nyttig funktion andet end at demonstrere problemet.
Jeg har fundet en work-around på problemet, men den er ikke rigtig i OOP-ånden, og da jeg netop ville objekt orientere min kode, vil jeg helst undgå den løsning.
Her er koden:
<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">
<HTML>
<HEAD>
<TITLE></TITLE>
<STYLE TYPE=\"text/css\">
<!--
BODY {background-color: #FFFFFF; font-family: Verdana, sans-serif; font-size: 8pt}
-->
</STYLE>
<SCRIPT LANGUAGE=\"javascript\" TYPE=\"text/javascript\">
<!--
function startWritingMsg(){
document.body.innerHTML += this.myProperty + \" - this works fine outside the setInterval method<BR>\"
this.hTimer = window.setInterval(\"document.body.innerHTML += this.myProperty + \'<BR>\'\",1000);
}
function myObject(){
this.myProperty = \"Hello World\";
this.startWrite = startWritingMsg;
}
var obj = new myObject();
//-->
</SCRIPT>
</HEAD>
<BODY>
<A HREF=\"\" ONCLICK=\"obj.startWrite();return false\">Start writing</A>
- this was supposed to write the myProperty string to the body every second...
The problem is that when inside the setInterval method of the window object,
\'this\' suddenly points to the window object instead of the custom \'myObject\'.
Is it possible to use the \'this\' pointer in this situation at all?
<BR><BR>
</BODY>
</HTML>
Jeg håber det er iorden med folk at jeg ikke har fået oversat teksten - hvis der er problemer vil jeg hjertens gerne forklare situationen på danmarksk.
Den workaround jeg snakkede om, var at gemme \'this\'-pointeren i en global variabel inden window.setInterval() kaldes, sådan her:
var objVar; //deklareret globalt
function startWritingMsg(){
document.body.innerHTML += this.myProperty + \" - this works fine outside the setInterval method<BR>\"
objVar = this;
this.hTimer = window.setInterval(\"document.body.innerHTML += obj.myProperty + \'<BR>\'\",1000);
}
Det virker, men det er ikke kønt... =)
På forhånd tak for hjælpen.