var sc = new stuCore();
function stuCore() {
this.readyPages = [];
this.once = true;
var self = this;
// gets called asynchronously
this.doPrepPage = function (page){
if(self.once == true){
// still gets executed every time, assignment fails
self.once = false;
doSomeStuffOnce();
}
};
this.addReadyPage = function (pageid) {
console.log("readypage called");
this.readyPages.push(pageid);
if (!$.inArray(pageid, self.readyPages) != -1) {
this.doPrepPage(pageid);
}
};
}
为什么这个任务失败了?我以为我知道js的基础知识,但我很难过。那么什么是可能的解决方案?首先调用构造函数并在那里设置变量?
修改 在其他一些脚本中被这样调用:
sc.addReadyPage(self.id);
答案 0 :(得分:1)
jQuery.inArray
函数将返回包含给定值的数组中的索引。在检查pageid
中是否存在this.readyPages
之前,您的脚本会将self.readyPages
推送到this.readyPages
。 self.readyPages
和doPrepPage
是相同的数组引用,因此结果将始终为零或更大,因此调用this.addReadyPage = function (pageid) {
console.log("readypage called");
if ($.inArray(pageid, self.readyPages) != -1) {
this.readyPages.push(pageid);
this.doPrepPage(pageid);
}
};
的条件将永远不会运行。
您可以尝试切换订单:
!
(编辑:删除了额外的{{1}},谢谢@chumkiu)
答案 1 :(得分:0)
如果我理解正确,您将this.doPrepPage
称为<insert variable name here>.doPrepPage
?
如果是这种情况,那么您的var self
会传递给匿名函数并存储在那里,因此每当您调用this.doPrepPage
时,它都会使用self
的局部变量。
尝试将self
设置为全局变量,这样它会永久修改self
,因此每次调用this.doPrepPage
时都会使用更新后的变量。