2012-02-16 11 views
0

イメージをロードし、読み込んだ後にメソッドを呼び出すクラスを作成しています。オブジェクトへのリンクを匿名関数に送信するにはどうすればよいですか?

function Texture(){ 
    this.afterload = function(){ 
     document.write("loaded!"); 
    } 
    this.load = function(name){ 
     this.img = new Image(); 
     this.img.src = name; 
     this.img.onload = function(){ 
      // there is the problem - how to pass "this" to anonymous function? 
      this.afterload(); 
     } 
    } 
} 

texture = new Texture(); 
texture.load("something.png")​;​ 
// now it should write "loaded" after loading the image. 

ただし、問題はリンクをオブジェクトに渡すことです。私がこれを使うと、うまくいきません。

オブジェクトインスタンスを匿名メソッドに渡す方法はありますか?

this.load = function(name){ 
     this.img = new Image(); 
     this.img.src = name; 
     var _this = this; 
     this.img.onload = function(){ 
      _this.afterload(); // use local variable, '_this', instead of 'this' 
     }; 
    }; 

匿名関数は、「キャプチャ」またはその変数を「オーバー閉じて」、ともまだそのを含む後にそれを参照することができるようになりますでしょう:あなたはレキシカル変数にthisをコピーする必要があり

答えて

1

関数が返されました。

+0

これはそれだと思います!どうもありがとうございました。 – Kuka

+0

@Kuka:ようこそ! – ruakh

1

内部関数の外側のオブジェクトを指す別の変数を定義し、この変数を使用して参照します。

var that = this; 
this.img.onload = function(){ 
    that.afterload(); 
}; 
+0

ruakhの方が速いですが、とにかく助けてくれてありがとう。 – Kuka

関連する問題