带有回调的javascript中的OOP

时间:2009-11-05 16:09:18

标签: javascript oop javascript-events

当我点击关闭链接时,我想关闭我的窗口(只是一个可以拖动的绝对位置的div)

这是我的代码

function ApplicationWindow() {
    this.window = $('<div class="window"></div>');

    this.create = function create() {
        //.....
        var closeButton = this.window.find('.close');
        closeButton.live('click', this.close);
    }

    this.close = function close() {
        this.window.fadeOut(200);
    };
}

当我点击关闭按钮时,执行关闭功能,但问题是我收到错误“this.window is undefined”。那是因为我认为close函数作为回调传递,但我的问题是如何以一种很好的方式解决这个问题?

4 个答案:

答案 0 :(得分:1)

请勿使用this。在JS中,保留字this根据上下文而改变,因此在这种情况下你想要避免它。

在范围内使用简单变量可以解决问题:

function ApplicationWindow() {
    var theWindow = $('<div class="window"></div>');

    this.create = function create() {
        //.....
        var closeButton = theWindow.find('.close');
        closeButton.live('click', this.close);
    }

    this.close = function close() {
        theWindow.fadeOut(200);
    };
}

答案 1 :(得分:0)

像这样;

function ApplicationWindow() {
    this.window = $('<div class="window"></div>');

    this.create = function create() {
        //.....
        var closeButton = this.window.find('.close');
        var self = this;
        closeButton.live('click', function() {
            self.window.fadeOut(200);
        });
    }
}

答案 2 :(得分:0)

您使用的是哪个库?您应该能够将该函数绑定到您的对象:

this.close = function close() {
    this.window.fadeOut(200);
}.bind(this);

答案 3 :(得分:0)

有关JavaScript的好奇this - 绑定功能的解释以及如何使用显式闭包或function.bind解决此问题,请参阅this answer