3
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);
4

2 回答 2

1

jQuery.inArray函数将返回给定值的包含数组中的索引。您的脚本pageidthis.readyPages检查它是否存在于self.readyPages. this.readyPagesself.readyPages是相同的数组引用,因此结果将始终为零或更大,因此调用的条件doPrepPage将永远不会运行。

您可以尝试切换他们的顺序:

this.addReadyPage = function (pageid) {
        console.log("readypage called");
        if ($.inArray(pageid, self.readyPages) != -1) {
                this.readyPages.push(pageid);
                this.doPrepPage(pageid);
        }
};

(编辑:删除了额外的!,谢谢@chumkiu)

于 2012-08-03T10:07:12.120 回答
0

如果我理解正确,您将调用this.doPrepPageas <insert variable name here>.doPrepPage

如果是这种情况,那么您var self将传递给匿名函数并存储在那里,因此每次调用this.doPrepPage它时都会使用self.

尝试设置self为全局变量,这样它将永久修改self,因此每次this.doPrepPage调用它都会使用更新的变量。

于 2012-08-03T09:59:58.713 回答