2

我真的不明白为什么我的变量未定义这是我的代码:

Calendar = function() {

    this.data;  
    this.init = function(path, callback){
        $.ajax({
            url:path,
            type:'GET',
            success:function(data){
                this.data = data;
                console.log(this.data);
                callback();
            }
        })
    }

    this.create = function(){
        this.generateYear();
    }   

    this.generateYear = function(){
        console.log(this.data); 
    }   
}

我像这样使用它:

$(document).ready(function(){
    var calendar = new Calendar();
    calendar.init(path,function(){
        calendar.create();
    });
});

所以第一个console.log很好,但第二个是未定义的,我不明白为什么,因为他是在之后调用的。

谢谢你的帮助

4

3 回答 3

5

在 ajax 函数中设置上下文参数。试试这个:

 $.ajax({
        url:path,
        type:'GET',
        context: this,
        success:function(data){
            this.data = data;
            console.log(this.data);
            callback();
        }
    })
于 2013-07-26T08:26:09.000 回答
3

this,在你给ajax的回调中,不是你的日历。

将您的初始化函数更改为

this.init = function(path, callback){
    var calendar = this;
    $.ajax({
        url:path,
        type:'GET',
        success:function(data){
            calendar.data = data;
            console.log(calendar.data);
            callback();
        }
    })
}
于 2013-07-26T08:25:34.457 回答
0

在 this.generateYear 中,您对“this”的调用不再引用您的 Calendar 对象,而是引用了 Window 对象,该对象很可能没有数据作为属性。确保您阅读了有关Javascript 绑定的更多信息

将 this 的实例存储在对象内的变量中并稍后使用它,将起作用。例子:

this.init = function(path, callback){
    var self = this;
    $.ajax({
        url:path,
        type:'GET',
        success:function(data){
            self.data = data;
            console.log(self.data);
            callback();
        }
    })
}
于 2013-07-26T08:34:14.867 回答