You are here: irt.org | FAQ | JavaScript | Timeout | Q790 [ previous next ]
The 'this' only has scope at the time, and not later when a timer triggers. The trick is to retain a reference to 'this' by the use of a global variable:
<SCRIPT LANGUAGE="JavaScript"><!-- var myGlobalVar = null function myMethod1() { this.surname = this.fullname.substring(this.fullname.indexOf(' ') + 1,this.fullname.length); // the next line works at this currently has scope: this.method2(); // the next line doesn't work as this will not have scope in a second from now setTimeout('this.method2()',1000); // the following will work as myGlobalVar always has scope within the current page myGlobalVar = this; setTimeout('myGlobalVar.method2()',1000); } function myMethod2() { // the next line works at this always has scope: alert(this.surname); } function ownObject(fullname) { this.fullname = fullname; this.method1 = myMethod1; this.method2 = myMethod2; } myObject = new ownObject('Martin Webb'); myObject.method1(); //--></SCRIPT>