我制作了一个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