function foo()
{
> setInterval( "foo()", 1000 );
如果使用OO的技術,可以這樣,
程式碼如下:
// constructor
function MyObj
{
function foo()
{
{
function foo()
{
{
function foo()
{
data);
}
this.timer = foo;
this.data = "Hello";
setInterval( "this.timer()", 1000 );
}
function Another()
{
// create timer when create object var obj = new MyObj(); } } 但是,它並不能像你想像的那樣運作。原因在於setInterval()這個函數並不能辨識this這個變數。一個workaround 的方法可以這樣。
複製程式碼
程式碼如下:
function Another()
顯然,它可以正確工作,但如果你是完美主義者,你就不會對它滿意。幸運的是,可以將這個動作放到構造函數中去,形式上有點變化。
複製程式碼
程式碼如下:
// constructor function foo()
{
alert( this.data );
}
this.timer = foo;
this.data = "Hello";
var self = this;
setInterval( function() { self.timer(); }, 1000 );
}
function Another()
}
OK, 透過使用一個閉包,就可以了。至於其中的原因,我想給讀者自己去思考。
最後,給一個各種測試case的例子。
複製代碼
代碼如下:
Hello Timer
var o = null; function OnClick() { o = new Obj(); // 1st class //setInterval( "o.timer( )", 1000 ); setInterval( function() { o.timer(); }, 1000 ); // 2nd class //setInterval( o.timer, 1000 ); //setInterval( o.timer, 1000 ); }
input>