举例说明揭示模块模式经常被引用的缺点



我读了Javascript设计模式,然后读了一堆关于RMP的SO答案,我不断发现,在提到缺点的地方,这是书中直接引用的话:

这种模式的一个缺点是,如果私有函数引用公共函数,那么如果需要补丁,则不能覆盖该公共函数。这是因为私有函数将继续引用私有实现,并且该模式不适用于公共成员,只适用于函数。

引用私有变量的公共对象成员也要遵守无补丁规则。

因此,使用"显示模块"模式创建的模块可能比使用原始模块模式创建的更脆弱,因此在使用过程中应小心。

很抱歉我很愚蠢,但上面的解释对我来说并不合适。有人能提供一个代码丰富的可视化示例来说明这种缺点意味着什么吗?

我认为这解释了经常被引用的缺点。就我个人而言,如果你喜欢组合而不是继承,我认为这没什么大不了的,因为它根本不会出现。

var revealed = (function() {      
function foo() {
return baz();
}
function bar() {
return "I am the original bar!";
}
// private function always calls bar because it's in the closure
// and it can't see the "instance" variable
function baz() {
return bar();
}
return { foo : foo, bar : bar }
})();
var child = Object.create(revealed);
child.bar = function() {
return "I am the new bar!";
}
// we want this to call the new bar but it doesn't
console.log(child.foo()); // I am the original bar!

希望这能有所帮助!

最新更新