用一个例子描述Revealing Module Pattern的常见缺点

时间:2017-10-31 18:44:32

标签: javascript design-patterns

我阅读了Javascript设计模式,然后是RMP上的一堆SO答案,我一直发现在提到劣势的地方,它是本书的直接引用:

  

此模式的缺点是,如果私有函数引用公共函数,则如果需要补丁,则无法覆盖该公共函数。这是因为私有函数将继续引用私有实现,并且该模式不适用于公共成员,仅适用于函数。

     

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

     

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

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

1 个答案:

答案 0 :(得分:1)

我认为这解释了经常引用的劣势。就个人而言,如果你赞成合成而不是继承,我不会认为这是一个很大的交易,因为它只是不会出现。

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!

希望这有帮助!