2012-03-23 13 views
0

コード:setTimeout(javascript)でオブジェクトメソッドの関数呼び出しを処理していますか?

​var a = function() { 
    this.message = "hello"; 
    this.shout = function(){ 
     alert(this.message); // alerted undefined 
    } 
    this.Timer = setTimeout(this.shout, 3000); 
} 

var b = new a(); 

私は警告ダイアログで未定義得ます。私はsetTimeoutで "this.shout()"を試みましたが、次に叫び声を見つける際にDOMエラーがあります。私はこれにどのように対処しますか?

答えて

0

thisshoutではなく機能よりも、機能shoutを指しa

あなたがaの範囲であなたの変数を定義する代わりに使用している場合これを後で参照して価値を得ることができます:

var a = function() { 
    var message = "hello"; 
    this.shout = function(){ 
     alert(message); // Alerts hello 
    } 
    this.Timer = setTimeout(this.shout, 3000); 
} 

var b = new a(); 

それとも、あなたがaを参照するために自己を使用できるようにあなたは、代わりに参照を格納することができたい場合:

var a = function() { 
    this.message = "hello"; 
    var self = this; 

    this.shout = function(){ 
     alert(self.message); // Alerts hello 
    } 
    this.Timer = setTimeout(this.shout, 3000); 
} 

var b = new a(); 
0
this.message 

は、現時点では範囲外であるため、this.shoutの機能の中にある必要があります。

は、その後、それは動作します:)あなたの関数で

var a = function() { 

    this.shout = function(){ 
     this.message = "hello"; 
     alert(this.message); // alerted undefined 
    } 
    this.Timer = setTimeout(this.shout, 3000); 
} 

var b = new a(); 
0

は「この」内部のsetTimeoutを使用すると、VAR外で以前に取得しなければならないのsetTimeoutのインスタンスであります「this」

var a = function() 
{ 
    this.message = "hello"; 
    this.shout = function() 
    { 
     alert(this.message); // alerted undefined 
    } 
    var t = this; 
    this.Timer = window.setTimeout(function() 
    { 
    t.shout(); 
    }, 3000); 
} 

var b = new a(); 
関連する問題