我有一段非常艱難的時光,用JavaScript包裝了原型。無法在JavaScript中使用「類」方法進行回調
以前我遇到了麻煩,打電話是這樣的:
o = new MyClass();
setTimeout(o.method, 500);
,我被告知我可以通過使用修復:
setTimeout(function() { o.method(); }, 500);
而這個工作。我現在有一個不同的問題,我認爲我可以用同樣的方式解決它,只需放入一個匿名函數即可。我的新問題是這樣的:
MyClass.prototype.open = function() {
$.ajax({
/*...*/
success: this.some_callback,
});
}
MyClass.prototype.some_callback(data) {
console.log("received data! " + data);
this.open();
}
我發現的MyClass.prototype.some_callback
體內的this
關鍵字並不是指的MyClass
實例該方法被調用時,而這似乎是jQuery的ajax請求(它是一個包含xhr對象和我的ajax調用的所有參數等的對象)。
我也試着這樣做:
$.ajax({
/* ... */
success: function() { this.some_callback(); },
});
,但我得到的錯誤:
Uncaught TypeError: Object #<an Object> has no method 'handle_response'
我不知道如何正確地做到這一點。我是JavaScript新手,原型的概念 - 有時 - 類行爲 - 類 - 但通常 - 不會讓我感到困惑。
那麼這樣做的正確方法是什麼?我是否試圖強制JavaScript進入它不屬於的範式?
沒關係,我想這一點,但我的結果是一樣的:調用'some_callback'作品,但'some_callback'的'this'內指的是一您在第一個代碼示例中突出顯示的jax請求對象。我怎樣才能在回調中調用'some_callback','this'會引用設置回調的'MyClass'對象? – 2010-10-25 20:50:01
我有一個小錯誤。更新了答案。 – galambalazs 2010-10-25 21:02:36
您更新的示例像魅力一樣工作。我以爲我已經嘗試過了,它不起作用......我想我早些時候嘗試過這種方法時犯了一個錯誤。 – 2010-10-25 21:03:21