this.function不是函数错误,但函数存在

Ain*_*ine 3 javascript function this

我有一些代码来获取日历事件并显示它们.自上次调用后,如果事件已更改,则仅更新显示.

var calendar = {

    events = null,

    display_calendar_events : function (data) {
        // Some display stuff...
    },

    get_events: function() {

        // Get messages for calendar
        $.getJSON("/ajax/get-events/", function(json){

            var new_events = json.data;
            // If events haven't changed, do nothing
            if (this.events === new_events) {
                return true;
            }

            // Events have changed. 
            // Save new events
            this.events = new_events;

            // Display new events
            this.display_calendar_events(json);
        });
   },
}
Run Code Online (Sandbox Code Playgroud)

我称之为:

calendar.get_queued_events();
Run Code Online (Sandbox Code Playgroud)

问题是,我收到错误"this.display_calendar_events不是函数"(最后一行代码).但是,如果我将此行更改为:

calendar.display_canendar_events(josn)
Run Code Online (Sandbox Code Playgroud)

有用.使用"this.events"存储旧事件在两种情况下都能正常工作.

谁可以给我解释一下这个?"这个"如何为某些东西而不是其他东西工作?谢谢.

Rya*_*n P 8

在jQuery AJAX回调中,this引用ajax请求对象.var self = this;在AJAX调用之前尝试使用,并在回调使用中使用self.display_calendar_events().

或者,您可以直接引用calendar.display_calendar_events().但这并不像self方法那样容易重构.

  • 这与jQuery或AJAX没有任何关系,这只是闭包在JavaScript中的工作方式. (2认同)