私はいくつかの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のためにウィンドウのコンテキストに入ります。これを修正する方法はありますか、それともパターンデザインの問題ですか?
感謝;)私は、「バインド」プロトタイプの関数を呼び出すとは思わない
この問題の解決策の1つは、['bind'](https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_objects/Function/bind)を使用して問題を解決する方法についての話です。定義した独自の 'bind'関数と混同しないでください。 –
これは既に重複としてマークされていましたが、@ GillesCは私が知ることから正しいです。正しいコンテキストを 'window.setTimeout(this.start.bind(this)、300); 'で適用することができます。 –
私は何かを見つけたかもしれません: – Axel