我在面向对象的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支持中令人作呕,因此我必须在这里犯一个愚蠢的错误