2016-09-13 4 views
0

image.onloadのクラスオブジェクトを参照する方法はありますか? thisは画像そのものを指します。テクスチャオブジェクトをどのように参照できますか?「クラス」内のオブジェクト関数の「クラス」オブジェクトを参照

https://jsfiddle.net/yL648t40/

function Texture(url){ 
    this.image = new Image(); 
    this.image.src = url; 
    this.image.onload = function(){ 
    this.width = this.image.width; 
    this.height = this.image.height; 
    } 
} 

text = new Texture("http://opengameart.org/sites/default/files/styles/watermarked/public/bone2-equus_hemionus.png"); 

document.body.innerHTML += text.image + "<br>"; 
document.body.innerHTML += text.image.src + "<br>"; 
document.body.innerHTML += text.image.width + "<br>"; 

私はobiviouslyそれはあなたから自己引数を削除する必要が

+0

'self'は' var self = ... 'として正しく宣言し、それをパラメータリストから削除すると動作します。 – Bergi

答えて

1

動作しないテクスチャクラス

self = this; 
this.image.onload = function(self){ 
    self.width = self.image.width; 
    self.height = self.image.height; 
} 

しかし、内部でこのようなものを使用して試してみましたあなたのハンドラー:

self = this; 
this.image.onload = function(){ 
    self.width = self.image.width;  
    self.height = self.image.height; 
} 

もう1つのオプションは、この関数をバインドすることですが、純粋なjavascriptを使用すると複雑になります。

+0

ああ、私はオブジェクト関数に 'this'を入れずにクラス引数を使うことができるのか分かりませんでした。ありがとう –

+0

完全性のために、クラスではありません。基礎について学びたい場合は、参照とスコープの詳細です。 –

+0

グローバルな 'self'変数が動作します。 – Bergi

0

sevaralオプションがあります。

最初this answerとして提案されている回避策を使用してください:

第2:このようにFunction.bindを使用してください。

function Texture(url){ 
    this.image = new Image(); 
    this.image.src = url; 

    var loadHandler = function(){ 
    this.width = this.image.width; 
    this.height = this.image.height; 
    }; 

    this.image.onload = loadHandler.bind(this); 
} 

サード:(ご使用の環境がES6を余裕があれば)自分の体にthisコンテキストを保持します使用ES6の矢印機能、。 Hereはいい記事です。

+0

'Function.bind'について知りませんでした。 あなたは良いと思いますか? 'self'回避策か' Function.bind'ですか? –

関連する問題