解释javascript:值赋值失败

时间:2012-08-03 09:49:11

标签: javascript

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

2 个答案:

答案 0 :(得分:1)

jQuery.inArray函数将返回包含给定值的数组中的索引。在检查pageid中是否存在this.readyPages之前,您的脚本会将self.readyPages推送到this.readyPagesself.readyPagesdoPrepPage是相同的数组引用,因此结果将始终为零或更大,因此调用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时都会使用更新后的变量。