我需要擴展一個封裝在閉包中的類。這個基類是以下內容:閉包對象的繼承和方法的重寫
var PageController = (function(){
// private static variable
var _current_view;
return function(request, new_view) {
...
// priveleged public function, which has access to the _current_view
this.execute = function() {
alert("PageController::execute");
}
}
})();
繼承是使用下面的函數實現:
function extend(subClass, superClass){
var F = function(){
};
F.prototype = superClass.prototype;
subClass.prototype = new F();
subClass.prototype.constructor = subClass;
subClass.superclass = superClass.prototype;
StartController.cache = '';
if (superClass.prototype.constructor == Object.prototype.constructor) {
superClass.prototype.constructor = superClass;
}
}
我的子類的PageController:
var StartController = function(request){
// calling the constructor of the super class
StartController.superclass.constructor.call(this, request, 'start-view');
}
// extending the objects
extend(StartController, PageController);
// overriding the PageController::execute
StartController.prototype.execute = function() {
alert('StartController::execute');
}
繼承工作。我可以從StartController的實例調用每個PageController的方法。但是,方法覆蓋不起作用:
var startCont = new StartController();
startCont.execute();
警報「PageController :: execute」。 我應該如何重寫此方法?
爲什麼使用PageController的閉包?它看起來像_current_view也可以在構造函數中聲明。 – Alsciende