在Javascript中这是什么样的模式/对象?

mrb*_*lah 3 javascript

我看到这个模式很多(我实际上使用过),但我想要解释它是如何工作的.

var mystuff = function() {


    var blah = function() {

    };


    return {

        setup: function() {
              blah();
        };

    };


}();
Run Code Online (Sandbox Code Playgroud)

然后用法很像OOP:

mystuff.setup();
Run Code Online (Sandbox Code Playgroud)

Mar*_*c W 6

这样做是将公共接口返回给您的对象.看起来您正在使用公共setup()函数来访问私有blah()函数.这是在Javascript对象中模拟公共和私有成员函数的一种方法.

因为在底部mystuff定义了尾随(),所以它在解析器到达时立即执行mystuff.setup(),并且实际上使用该setup()方法返回匿名对象(您的公共接口).


Cre*_*esh 6

其他人解释了它是如何工作的.这只是关于该主题的更多背景信息.

这就是所谓的"模块模式"(通过创造道格拉斯·克罗克福德我相信,但在博客更早).

它为您提供三个主要好处:

  1. 命名空间(左边的值"function")
  2. 一个私有的"空间",用于放入(变量,函数等)不需要或不应该污染全局命名空间的东西(这是return声明之前的内容)
  3. 一个公共"空间",用于放置您希望可供命名空间用户访问的内容(这是return语句)

所有这些都是一种可读的形式.