如何在JavaScript中使用Revealing模块模式

the*_*ava 78 javascript

我偶然发现了这篇文章:JavaScript的Revealing Module Pattern.我想在我的项目中使用它.

让我们想象一下我有一个函数abc,我在我的主JavaScript文件中调用该函数.

这种模式会使事情变得不同吗?谁能告诉我这种模式的基本例子?

Koo*_*Inc 97

一个小例子:

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

   return {
      name: 'revealed',
      abcfn: abc
   }
}();
Run Code Online (Sandbox Code Playgroud)

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

显示用法:

alert(revealed.name);    //=> 'revealed'
alert(revealed.abcfn()); //=> 5 (1*2+3)
Run Code Online (Sandbox Code Playgroud)

  • 这种模式改变了我的生活! (8认同)
  • 我知道这是旧的,但是abc()的返回值缺少一个括号=] (6认同)

Rob*_*nik 23

DC = Douglas Crockford
RMP =揭示模块模式

DC和RMP之间的差异主要是组织/可读的

例子在文章中提出了吗?你究竟在问什么,因为这些东西与文件无关,而是与闭包有关.

您将所有内容放在闭包(函数)中,并仅显示您希望可访问的那些部分.DC的风格和RMP之间的区别是,在第一个功能在不同的地方被定义而在RMP,他们在同一个地方总是定义,然后再把显露公众对象文本.

所以在DC和RMP中你有:

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

这两种模式的不同之处仅在于可读性.在DC情况下,您无法始终知道某些功能将在何处定义,但在RMP中,您始终知道所有功能都在私有部分中.


yoj*_*o87 12

Essential JavaScript Design Patterns For Beginners文章中描述了显示模块模式.


Rob*_*obG 6

作者"Douglas Crockford创建对象的模式"所称的方法实际上是由Richard Cornford 等人开发的模块模式.请参阅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