2011-06-30 24 views
3

関数内のインスタンス変数に最も簡単にアクセスするにはどうすればよいですか?javascriptの関数内でインスタンス変数にアクセスしますか?

function MyObject(){ 

    //Instance variables 
    this.handler; 

    //Methods 
    this.enableHandler = function(){ 
     var button = document.getElementById('button'); 
     button.onclick = function(){ 
      this.handler();//Is not working 
     } 
    } 

} 
var myObject = new MyObject(); 
myObject.handler = function(){ 
    alert('Hello World!'); 
} 
myObject.enableHandler(); 

button.onclick = this.handler;に設定することができます。これは単なる例です。主な質問は、その機能の中でthis.handlerにアクセスする方法です。

にアクセスするための新しい変数var handler = this.handlerを定義することもできます。しかし、変更の場合handlerthis.handlerも変更になりますか?

+2

あなたはjQueryについて言及しましたが、私はそれを使用していません... –

答えて

9
function MyObject(){ 

    //Instance variables 
    this.handler; 
    var that = this; //notice change 
    //Methods 
    this.enableHandler = function(){ 
     var button = document.getElementById('button'); 
     button.onclick = function(){ 
      that.handler();//Is not working notice the change 
     } 
    } 

} 
var myObject = new MyObject(); 
myObject.handler = function(){ 
    alert('Hello World!'); 
} 
myObject.enableHandler(); 

これを外部関数のスコープ内のvarに割り当てると、内部関数スコープチェーンに渡されます。内部関数の中でこれを参照するのは内部関数を指し、これを割り当てた変数を参照します。ここでは "that"はそのオブジェクトを参照します。

+0

「that.handler'を変更しても、this.handlerも変更されますか? – einstein

+0

はい、でもvar = thisを実行する必要があります。私は2つの場所を見て、私はコメントの変更を通知した。 –

関連する問題