2

SO、私はjavascriptオブジェクトを作成しようとしており、setIntervalメソッドを使用しています。

これは機能していないようです。引用符を削除すると、メソッドは 1 回実行されます。理由はありますか?また、Jquery を使用しています。

<script>
$(function(){
   var kP = new Kompost();
   setInterval('kP.play()', kP.interval);
});

var Kompost = function()
{
   this.interval = 5000;
   var kompost = this;

   this.play = function()
   {
      alert("hello");
   }
}
</script>
4

3 に答える 3

8

@Yacoby と @Nick によって提供されるソリューションは、値がグローバル オブジェクトを指すため、メソッドがそれ自体の内部で値をplay使用しない場合にのみ機能します。thisthis

これを処理するには、別のアプローチが必要です。たとえば、次のようになります。

$(function(){
 var kP = new Kompost();
 setInterval(function () {
   kP.play();
 }, kP.interval);
});

以下も参照してください。

于 2010-07-13T23:28:22.973 に答える
7

次のように呼び出します。

$(function(){
   var kP = new Kompost();
   setInterval(kP.play, kP.interval);
});

問題は、それkPがそのdocument.readyハンドラー内にあり、グローバル コンテキストでは使用できないことです (そのクロージャー内でのみ使用可能です)。文字列を渡したとき、setInterval()またはsetTimeout()グローバル コンテキストで実行されたとき。

コンソールを確認すると、エラーが表示され、kPis undefined と表示されますが、そのコンテキストでは正しいです。全体的には次のようになります。

var Kompost = function()
{
   this.interval = 5000;
   var kompost = this;
   this.play = function() {
     alert("hello");
   };
};

$(function(){
   var kP = new Kompost();
   setInterval(kP.play, kP.interval);
});

あなたはそれがここで働いているのを見ることができます

于 2010-07-13T23:25:36.353 に答える
0

タイムリーフなどのあらゆる場所で機能します...

function load() {
  alert("Hello World!");
}
setInterval(function () {load();}, 10000);
于 2015-07-23T12:19:59.357 に答える