如何在 JavaScript 中使用揭示module模式

IT技术 javascript
2021-02-04 07:36:05

我偶然发现了这篇文章:JavaScript 的揭示module模式我想在我的项目中使用它。

假设我有一个函数abc,我在我的主 JavaScript 文件中调用该函数。

这种模式会让事情变得不同吗?任何人都可以向我展示这种模式的基本示例吗?

6个回答

一个小例子:

var revealed = function(){
   var a = [1,2,3];
   function abc(){
     return (a[0]*a[1])+a[2];
   }

   return {
      name: 'revealed',
      abcfn: abc
   }
}();

在匿名函数中,该函数被启动以提供revealed一个值,a并且abc对该函数是私有的。该函数返回的是一个带有name属性和abcfn属性的对象字面量,它是对abc function. abc function使用私有变量a这一切都可以通过使用闭包来完成(函数范围内的所有内容都可以被同一函数中的其他所有内容引用)。

显示用法:

alert(revealed.name);    //=> 'revealed'
alert(revealed.abcfn()); //=> 5 (1*2+3)
@NeonWarge:你没有。该函数不是构造函数。它返回一个对象字面量,其中aabc被关闭。
2021-03-15 07:36:05
当您可以使用最终module模式时,为什么要使用显示module模式?github.com/tfmontague/definitive-module-pattern
2021-03-18 07:36:05
我知道这是旧的,但是 abc() 的返回值缺少括号 =]
2021-03-26 07:36:05
这个模式改变了我的生活!
2021-03-31 07:36:05
如何创建一个新的揭示实例?
2021-04-09 07:36:05

DC = Douglas Crockford
RMP = 揭示module模式

DC 和 RMP 之间的区别主要是组织性/可读性

示例是在文章本身中提出的吗?你到底在问什么,因为这些东西与文件无关,而是与闭包有关。

你把所有东西都放在一个闭包(函数)中,只暴露那些你希望可以访问的部分。DC的风格和RMP之间的区别是,在第一个功能在不同的地方被定义而在RMP,他们在同一个地方总是定义,然后再把显露公众对象文本。

所以在 DC 和 RMP 中你有:

  • 可以定义私有部分(变量和函数)的闭包
  • 私处
  • 定义公共可见功能和变量(状态)的公共结果

这两种模式仅在可读性上有所不同。在 DC 情况下,您不能总是知道某些功能将在哪里定义,但在 RMP 中,您总是知道一切都在私有部分。

DC 和 RMP 并不相同——这两者在继承方面非常不同。例如,参见stackoverflow.com/questions/21925720/...
2021-03-17 07:36:05

揭示module模式在Essential JavaScript Design Patterns For Beginners文章中描述得非常好

作者所称的“Douglas Crockford 的对象创建模式”其实就是Richard Cornford等人开发的module模式请参阅http://groups.google.com/group/comp.lang.javascript/msg/9f58bd11bd67d937

至于例子,有很多。阅读以下文章并点击一些链接:http : //peter.michaux.ca/articles/module-pattern-provides-no-privacy-at-least-not-in-javascript-tm

我重新发布了我的帖子,如果还有任何问题,请告诉我:)
2021-03-21 07:36:05
有趣的是这些东西是如何随着时间变化的。David Mark(MyLibrary名人)已经使用了“揭示”版本有一段时间了,我对“非揭示”版本没有任何问题,所以我使用了它。:-)
2021-03-31 07:36:05

我喜欢将揭示module模式单例模式混合使用,以便我可以保留具有module模式优点的结构化代码:

var MyFunction = function(){

    var _ = {
       Init: function(){
          _.Config.foo = "hello world";
       },
       Config:{
          foo:null
       },
       ShowAlert:function(){
          alert(_.Config.foo);
       }
    }

    return {
        Init: _.Init,
        ShowAlert: _.ShowAlert
    };
}();

MyFunction.Init();
MyFunction.ShowAlert();

我在我的博客上写了更多关于这方面的信息:

http://curtistimson.co.uk/js/mixing-revealing-module-and-singleton-javascript-patterns/