使用Javascript对象方法作为jQuery事件处理程序?

时间:2014-06-17 20:27:17

标签: javascript jquery

我在面向对象的Javascript方面做得不多,所以对于我必须编写的脚本,我决定采用面向对象的方法来更好地了解它是如何工作的。

我有一个名为Page的对象,它定义了一些方法,其中两个方法使用this变量定义页面的行为。例如

var app = app || {};

app.PageType = {
    FIRST : 0,
    MIDDLE : 1,
    LAST: 2
};


app.Page = function(pageId, pageType, categoryItems) {
    this.pageType = pageType;
    this.pageId = pageId;
    this.categoryItems = categoryItems;
};

app.Page.prototype = {
    constructor: app.Page,

    someMethod: function(domDiv) {

    },

    establishListeners: function() {
        $('#Page' + this.pageId + ' > .pageNavigatorLeft').on('click', app.Page.navigateLeft);
        $('#Page' + this.pageId + ' > .pageNavigatorRight').on('click', app.Page.navigateRight);
    },

    navigateLeft: function(e) {
        var newPage = $('#Page' + (this.pageId - 1));
        var oldPage = $('#Page' + this.pageId);
        oldPage.fadeOut(2000);
        newPage.fadeIn(2000);
    },

    navigateRight: function(e) {
        var newPage = $('#Page' + (this.pageId + 1));
        var oldPage = $('#Page' + this.pageId);
        oldPage.fadeOut(2000);
        newPage.fadeIn(2000);
    }
}

上面的代码示例显示了我尝试使用establishListeners方法执行的操作。显然这不起作用,因为即使我可以将app.Page对象导航方法指定为jQuery事件的函数处理程序,那么this变量将引用匿名函数而不是特定{{1我希望这个函数模拟的对象实例。

我可以用匿名函数包装它并将app.Page对象实例传递给它自己的方法吗?我真的不想在app.Page类之外定义导航行为,因为这违背了定义自己行为的对象类的OO原则。

如果我想要做的是Javascript的限制,那么我可以接受这个,但我怀疑Javascript实际上是如此根本,内在,并且在其OO支持中令人作呕,因此我必须在这里犯一个愚蠢的错误

0 个答案:

没有答案