Javascript JS模块模式覆盖函数

Javascript JS模块模式覆盖函数,javascript,module-pattern,Javascript,Module Pattern,我有以下模式 BASE = function () { var that = {}; var number = 10; that.showNumber = function(){ that.alertNumber(); } that.alertNumber = function () { alert(number); }; return that; }; CHILD = function ()

我有以下模式

BASE = function () {
    var that = {};
    var number = 10;

    that.showNumber = function(){
        that.alertNumber();
    }

    that.alertNumber = function () {
        alert(number);
    };    
    return that;
};

CHILD = function () {
    var that = Object.create(BASE());
    var secondNumber = 20;

    // Override base function
    that.alertNumber = function () {
        alert(secondNumber);
    };
    return that;
};

var ch = CHILD();
ch.showNumber();
您能告诉我如何调整Douglas CrockFord设计的模块模式,以完全覆盖
alerNumber
功能吗?迄今为止,
showNumber
功能显示10而不是20

提前谢谢大家

带代码的JSFIDLE是可以更改的

that.showNumber = function(){
    that.alertNumber();
}


但我不确定我是否明白为什么不简单地使用原型。

为什么不简单地使用原型?这将使它变得简单。为什么不编写var=newbase()?这种模式允许多重继承,这是我不完全理解的。为什么base中的
this.alertNumber()
被引用到
base
类中的
that
?您使用的此模式在闭包中设置一个
that
变量,以确保函数showNumber正在使用构造函数中定义的实例,从而使大多数高级继承方案无法工作(例如,一个超类函数调用另一个函数并让它被重写).好的,如果我理解得很好,当我想重写父函数时,我必须使用不同的模式?我很抱歉有这样一个无意义的问题,但我只有在继承完全不同的Java方面的经验。好的,这个模式允许你重写父函数,它只是不允许你,如果你使用的是
,调用父函数的子函数。我建议使用标准模式(请参阅我答案中的链接),只要您不习惯JavaScript(那么您可能会使用自己的,这并不罕见)。并且不要使用“类”当你不需要它们的时候。如果你的JS看起来像Java,那你就错了。你应该有很多函数和回调,而不是很多类,即使是在一个大的应用程序中。我从你的链接中不明白的是,我如何“隐藏”私有变量并在公共函数中使用它们
that.showNumber = function(){
    this.alertNumber();
}