2012-02-01 8 views
3

私は以下のJavaScriptオブジェクトを持っています。ウィンドウのサイズが変更されたら、それ自身のresize()メソッドを呼び出すようにします。ただし、window.onresize関数では、thisはCanvasオブジェクトではなくwindowを指します。どのようにCanvasオブジェクトを呼び出すのですか?Javascript OOP:オブジェクトを参照する方法

function Canvas(element) { 
    this.element = element; 
    this.canvas = element.getContext("2d"); 
    this.width = element.width; 
    this.height = element.height; 

    this.resize = function() { 
     this.width = window.innerWidth; 
     this.height = window.innerHeight; 

     this.element.width = this.width; 
     this.element.height = this.height; 
    }; 

    window.onresize = function() { 
     this.resize(); 
      ^- error 
    }; 
} 

ありがとうございます。

+0

「this」の検索/チュートリアルで*実際に何を意味するのかを試してみましたか?ここのキーワードは "閉鎖"または "束縛"であり、百万のバリエーション(回答とSOの質問)があります。 –

答えて

4
window.onresize = this.resize.bind(this); 

あなたは古いブラウザをサポートしている場合は、Function.prototype.bind()ためthe MDN compatibility patchが含まれます。

+0

Perfect。まさに私が探していたものだ。ありがとう! – Patrickdev

+0

@Patrickdev 'bind'は実装されていないことに注意してください。 IE8とSafariでは、おそらくあなたはそれをシムにしたいと思っています。 –

4

onresizeハンドラのクロージャ内のコンストラクタのスコープに値 'this'を保存します。

var _this = this; 
window.onresize = function() { 
    _this.resize(); 
}; 
+0

お返事ありがとうございます。私が欲しいものを正確には行いますが、「私は解決法ではない」とはっきりしないように見えません。 – Patrickdev

+0

これを保存すると、どんなに素敵な考えですか? +1 –

+0

@Patrickdev私は実際に私が彼の解決策を覚えていればと思っています。私はそれを知っていましたが、私は 'var $ this = $(これ)'を頻繁に行う傾向があるため、決してそれを使用しませんでした。 – millimoose

関連する問題