我使用原型在JavaScript中定義了'類'。第一次func()運行時,它可以工作,但是當它第二次通過setTimeout調用時,它會失敗,因爲這次它失去了對象上下文I.E. 這不再引用該對象,但現在引用窗口。將樣機的功能作爲參數傳遞而不會丟失'this'背景
有沒有一種方法可以克服這個問題,同時仍然使用原型?還是我需要使用閉包來定義'類'?
function klass(){}
klass.prototype = {
a: function() {
console.log("Hi");
},
func: function(){
this.a();
setTimeout(this.func, 100);
}
};
var x = new klass();
x.func();
僅供參考函數沒有自己的任何方面,解決了每一個函數被調用,並只對通話時間。因此,函數的定義在何處以及如何定義並不重要,它只關心函數在特定時間的調用方式。 'x.func()'函數被稱爲'x'的屬性。 'var y = {func:x.func}; y.func()'該函數被稱爲'y'的屬性,'this'則被稱爲'y'。看看我要去哪裏? setTimeout總是調用窗口設置爲this的函數。 – Esailija 2011-12-22 22:23:33
[JavaScript Callback Scope]的可能重複(http://stackoverflow.com/questions/183214/javascript-callback-scope) – 2011-12-22 22:29:26