Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 用一个例子描述经常被引用的暴露模块模式的缺点_Javascript_Design Patterns - Fatal编程技术网

Javascript 用一个例子描述经常被引用的暴露模块模式的缺点

Javascript 用一个例子描述经常被引用的暴露模块模式的缺点,javascript,design-patterns,Javascript,Design Patterns,我阅读了Javascript设计模式,然后是关于RMP的一系列SO答案,我不断发现在提到缺点的地方,这是书中的直接引语: 这种模式的一个缺点是,如果私有函数引用公共函数,则如果需要修补程序,则不能重写该公共函数。这是因为私有函数将继续引用私有实现,并且该模式不适用于公共成员,只适用于函数 引用私有变量的公共对象成员也受无补丁规则的约束 因此,使用暴露模块模式创建的模块可能比使用原始模块模式创建的模块更脆弱,因此在使用过程中应小心 很抱歉,我很愚蠢,但上面的解释对我来说并不适用。有人能提供一个代码

我阅读了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!

希望这有帮助

遗产与此有什么关系?公平。您也可以在不继承的情况下进行修补。然而,结果是一样的。而且,这还没什么大不了的,因为这种补丁并不经常出现。你知道补丁模块意味着什么吗?你能把那些提到缺点的答案联系起来吗?可能是重复的