コードコピーは次のとおりです。
functionfoo()
{
}
setInterval( "foo()"、1000);
OOテクノロジーを使用する場合、これを行うことができます。
コードコピーは次のとおりです。
//コンストラクター
関数myobj
{
functionfoo()
{
アラート(this.data);
}
this.timer = foo;
this.data = "hello";
setInterval( "this.timer()"、1000);
}
機能別()
{
//オブジェクトを作成するときにタイマーを作成します
var obj = new Myobj();
}
しかし、あなたが思うようにそれは機能しません。その理由は、関数setInterval()がこの変数を認識しないためです。回避策はこれを行うことができます。
コードコピーは次のとおりです。
機能別()
{
var obj = nw myobj();
setInterval( "obj.timer()"、1000);
}
明らかに、それは正しく機能しますが、あなたが完璧主義者なら、あなたはそれに満足することはありません。幸いなことに、このアクションはコンストラクターに入れて、形を少し変えます。
コードコピーは次のとおりです。
//コンストラクター
関数myobj
{
functionfoo()
{
アラート(this.data);
}
this.timer = foo;
this.data = "hello";
var self = this;
setInterval(function(){self.timer();}、1000);
}
機能別()
{
var obj = new Myobj();
}
わかりました、閉鎖を使用することで、それは大丈夫です。理由については、読者に自分自身に考えを与えたいと思っています。
最後に、さまざまなテストケースの例を挙げてください。
コードコピーは次のとおりです。
<html>
<head>
<title>
こんにちはタイマー
</title>
<スクリプト言語= "jscript">
/*
* 3つのクラスがあります。
*
* 1.タイマーが実行でき、結果は問題ありません
* 2.タイマーは実行でき、結果は間違っています
*3。タイマーは実行できません
*
*/
関数obj()
{
functionfoo()
{
アラート(this.timer);
}
this.timer = foo;
//
var me = this;
var f = function(){me.timer(); };
var f2 = function(){this.timer(); };
// 1番目のクラス
// setInterval(f、1000);
// 3番目のクラス
// setInterval(f2、1000);
// 2番目のクラス
// setInterval(me.timer、1000);
// setInterval(this.timer、1000);
// setInterval(foo、1000);
// 3番目のクラス
// setInterval( "this.timer()"、1000);
// setInterval( "me.timer()"、1000);
// setInterval( "foo()"、1000);
}
var o = null;
function onclick()
{
o = new obj();
// 1番目のクラス
// setInterval( "o.timer()"、1000);
setInterval(function(){o.timer();}、1000);
// 2番目のクラス
// SetInterval(O.Timer、1000);
}
</script>
</head>
<body>
<入力型= "ボタン" onclick = "onclick()" value = "Click me"> </input>
</body>
</html>