2011-06-23 20 views
0

、私は私のスクリプトを起動すると、私はこれがあります。Javascriptを:のsetTimeout問題

var my_great_masterpiece = new function() 
{ 
     var self = this; 

はその後、私のスクリプトで、私はこれを持っている:

 response_xml: function() 
     { 
      if (self.http_request.readyState == 4) 
      { 
       if (self.http_request.status == 404 && countXmlUrl <= 3) 
       { 
        countXmlUrl++; 
        self.realXmlUrl = xmlUrl[countXmlUrl]; 
        self.request_xml(); 
       } 
       if (self.http_request.status == 200) 
       { 
        self.xmlDoc = self.http_request.responseXML; 
        self.storage.setItem('domains_raw_xml', self.http_request.responseText); 
        self.main.peter_save_data(); 
        self.timervar = setTimeout(function() 
        { 
// ########### Below line gives the error ############################# 
         self.new_version_show_window(); 
        }, 2000); 
       } 
      } 
     }, 
     new_version_show_window: function() 
     { 
... 
} 

私は取得していますエラーは次のとおりです。

Error: self.new_version_show_window is not a function

私は間違っていますか?

ありがとうございます!

+0

ここで、new_version_show_windowの関数定義を上に移動しようとしましたか?また、 'new_version_show_window'の前にカンマの代わりにセミコロンを使用してください。 –

+0

2番目の部分はどのように最初の部分に接続されていますか?あなたは 'prototype'を設定しますか? –

+0

@ josh.trow:いいえ、それはオブジェクトリテラルのようです。プロパティはコンマで区切られます。 –

答えて

5

new_version_show_windowが定義されているコードが不明です。たぶん、あなたは明示的に自己のそれを定義することができます。

self.new_version_show_window = function() { 
    /* ... */ 
} 

代わりに。それとも、ローカル名前空間でそれを定義したsetTimeout呼び出しでそれを直接使用することができます

self.timervar = setTimeout(function() { 
    new_version_show_window(); 
}, 2000); 

または単に:

self.timervar = setTimeout(new_version_show_window, 2000); 

ためclosureの、外側の関数で宣言された変数もで利用可能です内部関数。

編集

コード全体を送信していただきありがとうございます。あなたは以下のようなものをそれにアクセスする必要がありますのでnew_version_show_windowは、this.mainに定義されます。

self.timervar = setTimeout(function() { 
    self.main.new_version_show_window(); 
}, 2000); 
+1

(部分)オブジェクトリテラルがプロトタイプとして使用されている場合、それは動作するはずです。しかし、我々はより多くの情報を必要とする... –

+0

はい、あなたはそれについて正しいです。しかし、 'self'はすべての関数で終わるので、基本的にシングルトンでプロトタイプにはほとんど意味がありません。 'エラー:行方不明: – Magnar

+0

1 1は私に、このエラーを与えるプロパティ後id' 2つ目は、私は、このエラー与える: 'エラー: – Ryan

0

それはselfではJavaScriptの予約語[1]であることが考えられます。これはあなたにいくつかの問題を引き起こす可能性があります。

[1] http://www.quackit.com/javascript/javascript_reserved_words.cfm

+0

いいえ、そうではありません... –

+0

別の参考文献です:http://www.kourbatov.com/faq/reserved.htm – Jivings

+1

@Jivings:ブラウザの文脈では問題はないと言えます。さもなければ、私のコードの多くが壊れてしまうかもしれません。関数*内のローカル変数として定義することは間違いありません。衝突する可能性のある他の定義済み変数はありません。 –

0

これは、範囲の問題です。 new_version_show_windowは、それが呼び出されるコンストラクトのスコープ内にのみあります(明らかに、ある種のjQuery AJAX関数)。現在存在する限定されたスコープの外に定義すると、my_great_masterpieceにしか利用できません。