2016-12-08 6 views
0

私はいくつかのJSオブジェクトを記述しようとしています。何かにこだわらず、文脈がどのように働くのか分かりません。ここでは簡単な例を示します:Javascriptオブジェクトクロージャのコンテキスト

var MyApp = function(el) { 
    this.el = el; 
}; 

MyApp.prototype.bind = function() { 
    window.setTimeout(this.start, 300); 
} 

MyApp.prototype.test = function(msg) { 
    console.log(msg); 
} 

MyApp.prototype.start = function() { 
    console.log(this); // Returns the window context 
    this.test('Hello'); // Doesn't work, of course. 
} 

var myapp = new MyApp(el); 
myapp.bind(); 

問題はstartメソッドを呼び出すとき、私はwindow.setTimeoutのためにウィンドウのコンテキストに入ります。これを修正する方法はありますか、それともパターンデザインの問題ですか?

感謝;)私は、「バインド」プロトタイプの関数を呼び出すとは思わない

+0

この問題の解決策の1つは、['bind'](https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_objects/Function/bind)を使用して問題を解決する方法についての話です。定義した独自の 'bind'関数と混同しないでください。 –

+0

これは既に重複としてマークされていましたが、@ GillesCは私が知ることから正しいです。正しいコンテキストを 'window.setTimeout(this.start.bind(this)、300); 'で適用することができます。 –

+0

私は何かを見つけたかもしれません: – Axel

答えて

1

は素晴らしいアイデアです。しかし、渡します

this.start.bind(this) 

setTimeoutはこの問題を解決します。

+0

解決策が機能する限り、答えのテキストは意味をなさない。 –

+0

なぜそれは意味をなさないと思いませんか? – norbertk

+0

私は「私はあなたのプロトタイプ上の関数をバインドするのはいい考えです」と考えることはできません –

関連する問題