Господа, пытаюсь разобраться в программирование на JavaScript и возникают проблемы.
Имеется класс PageController, который реализован в виде замыкания, чтобы эмулировать создание private static переменных.
var PageController = (function(){
// статическая переменная, private. Доступна только привилигерованным методам
var _current_view;
// конструктор
return function(new_view) {
// private
var _view = new_view;
// Метода, который мы потом перепишем. Имеет доступ к private static _current_view
this.postDispatch = function() {
_current_view = _view;
document.getElementById(_current_view).style.display = 'block';
}
// Этот метод мы тоже перепишем позже
this.execute = function() {
alert("PageController::execute");
}
}
})();
Есть класс StartController, подкласс PageController'а
var StartController = function(request){
// Вызываем констуктор предка, т.е. конструктор PageController'а
StartController.superclass.constructor.call(this, request, 'start-view');
// Переписываем метод предка
this.execute = function() {
alert('StartController::execute');
}
// Переписываем метод предка
this.postDispatch = function() {
// А вот здесь хочу вызвать PageController::postDispatch(), но не получается
}
}
// Собственное, наследуем
extend(StartController, PageController);
Наследование выполянется следующей простенькой функцией
function extend(subClass, superClass){
var F = function(){
};
F.prototype = superClass.prototype;
subClass.prototype = new F();
subClass.prototype.constructor = subClass;
subClass.superclass = superClass.prototype;
if (superClass.prototype.constructor == Object.prototype.constructor) {
superClass.prototype.constructor = superClass;
}
}
Вызывается всё это дело из друго класса:
var controller = new StartController('blabla');
controller.execute(); // выдает StartController::execute(), т.е. метод переопределился, всё гут
controller.postDispatch();
Собственно, вопрос. Каким образом из StartController:: postDispatch() вызвать PageController:: postDispatch()?
this.postDispatch = function() {
alert(StartController.superclass.constructor); // function (request, new_view) {
// var _view = new_view;
// this.execute = function( { alert("PageController::execute");}
// this.postDispatch = function () {_current_view = ....
// }
alert(StartController.superclass.constructor.postDispatch); // undefined
Извиняюсь, если вопрос слишком примитивный, но никак не получается разобраться.