AJAX:如何找回对象的“this”

时间:2014-03-22 09:20:10

标签: jquery

这是我的问题,我试图让它尽可能短:

function Game()

    this.clickStartGame = function() {
        $('#xxx').fadeOut(function() {
            console.log(this);
            /* how to call this.showInformation() from here? */
        });
    };

    this.showInformation = function () {
        /* blabbla */
    }
}

var m = new Game();
m.clickStartGame();

如何在this.showInformation()事件结束后致电fadeOut()

2 个答案:

答案 0 :(得分:2)

默认情况下,fadeOut()处理程序this内部的问题将引用淡出的元素。

一个简单的解决方案是使用闭包变量并使用它来调用方法

function Game() {

    this.clickStartGame = function () {
        var self = this;
        $('#xxx').fadeOut(function () {
            console.log(self);
            /* how to call self.showInformation() from here? */
        });
    };

    this.showInformation = function () {
        /* blabbla */
    }
}

另一种方法是使用$.proxy() / Function.bind()将自定义执行上下文传递给fadeOut()回调,如

function Game() {

    this.clickStartGame = function () {
        $('#xxx').fadeOut($.proxy(function () {
            console.log(this);
            /* how to call this.showInformation() from here? */
        }, this));
    };

    this.showInformation = function () {
        /* blabbla */
    }
}

答案 1 :(得分:0)

function Game()

    var gameObj = this;

    this.clickStartGame = function() {
        $('#xxx').fadeOut(function() {
            console.log(this);
            gameObj.showInformation();
            /* how to call this.showInformation() from here? */
        });
    };

    this.showInformation = function () {
        /* blabbla */
    }
}

这会有用吗?