2011-12-30 16 views
1

私は以下のオブジェクトを持っています。私はsetTimeoutのコールバックの中から変数bに到達しようとしていますが、うまくいきません。私は、setTimeoutのコールバックはその周囲の関数の変数しか知っていないことを知っています。どうすればthis.bに到達できますか?ありがとうございました!関数を呼び出したオブジェクトの変数に到達する方法

function someFunc() { 
    this.a = 10; 
    this.b = 20; 
    this.func = function() { 
       this.c = 50; 
     console.log("a = " + this.a); //works 
     var time = setTimeout(function() { 
      console.log("b = " + someFunc.b); //this.b doesn't work 
      console.log("C = " + this.c); //why this doesn't work also? says undefined 
     },1000); 
    } 
} 

var m = new someFunc(); 
m.func(); 

答えて

3
function someFunc() { 
    this.a = 10; 
    this.b = 20; 
    var mySomeFunc = this; 
    this.func = function() { 
     console.log("a = " + this.a); //works 
     var time = setTimeout(function() { 
      console.log("b = " + mySomeFunc.b); 
     },1000); 
    } 
} 
2

thisは、関数オブジェクトを参照しません。それが呼び出されたコンテキストを参照します。 (m変数)

someFunc.bは、静的プロパティのような関数自体のプロパティです。
アウターthisへの参照を変数に保存する必要があります。

0

また、あなたのオブジェクトの範囲内で、あなたの匿名関数を実行するために、このようなものを使用することができます。

function createDelegate(instance, callback) { 
    return function() { 
     callback.apply(instance, arguments); 
    }; 
} 

function someFunc() { 
    this.a = 10; 
    this.func = function() { 
     this.c = 50; 
     console.log("a = " + this.a); 
     var time = setTimeout(createDelegate(this, function() { 
      console.log("b = " + someFunc.b); 
      console.log("C = " + this.c); 
     }),1000); 
    } 
} 

someFunc.b = 20; 

var m = new someFunc(); 
m.func(); 
関連する問題