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();
}