我製作了一個Bot類的原型。我的問題是,在我創建它之後,我把它稱爲init()。它在警報中正確地返回該值「a 5000」。然而,當那個原型函數調用getUpdates()時,它不再達到這個值並給出「b undefined」。我甚至試過this.self = this;在構造函數中,但沒有運氣。使用setInterval調用原型函數的問題
掙扎之後,我發現在setInterval中的self.getUpdates調用中添加()使得它正確得到值,然後出現另一個問題,setInterval只循環一次。我嘗試了setTimeout,並在getUpdates中調用它自己,但得到了「遞歸過多script.js:30:1」。我有時得到了「未捕獲的異常:內存不足」
我最初使用「var privateVars < - > this.methods」沒有太多問題,但切換到「this.publicVars < - > Class.prototype.methods」因爲我讀過他們應該更快,更少的內存,但這種原型方法給我的問題。我試過瀏覽谷歌,但沒有運氣。我寧願在init()上啓動計時器。
這裏是我的代碼:
var Bot = function() {
"use strict";
this.updateInterval = 5000;
this.updateTimer = null;
};
Bot.prototype.getUpdates = function() {
"use strict";
var self = this;
alert("b " + self.updateInterval); // returns "b undefined"
};
Bot.prototype.init = function() {
"use strict";
var self = this;
$.get(/* pretend url is here*/, function (data, status) {
alert("a " + self.updateInterval); // returns "a 5000"
self.updateTimer = setInterval(self.getUpdates, self.updateInterval);
});
};
window.bot = new Bot();
window.bot.init();
任何幫助或建議,將不勝感激。但是我認爲如果包含定時器的話,原型並不適用。
兩個@Rajaprabhu Aravindasamy和@Razzi Abuissa答案幫助解決問題,沒想到回覆這麼快,謝謝。然而,@Ramin答案沒有工作,setInterval只爲我觸發一次,但感謝嘗試。有沒有其他的方式來訪問類的原型方法,並且這個值就像一個set root,而不是假設'window'?說在多個函數內部被調用,但仍然知道'this'是指或者如果可能沒有它? – Nova
這就對了@Nova,最好的方式是Rajaprabhu和Razzi如何提出這樣的建議,以便將Bot函數引用發送到所有其他函數沒有任何開銷。豎起大拇指給他們。然而,對於你的情況,如果你想從任何地方訪問Bot函數引用,那麼你可以將它的引用賦值給窗口對象中的變量,就像這個'window.botReference = this;'在Bot函數內部。 – Ramin