我正在尝试创建一个带有函数foo.bar的库foo.js ,我可以这样调用它:

<script src="foo.js"></script>
<script>
    baz = foo.bar();
</script>

我正在尝试像这样编写该库:

foo = function() {
    foo.bar = function() {
        // code goes here
    }
}();

这是我在其他地方看到的一种模式,尽管我不能说我确切地了解发生了什么。 当我尝试使用此我听说foo当我尝试定义没有定义foo.bar 我想念什么?

===============>>#1 票数:3

有太多可能的模式,无法确定您想要哪种模式。

您可以这样做,例如:

var foo = (function(foo) {
    // here you can also declare "private" non exported variables,
    //   including functions that could be used by bar
    foo.bar = function() {
        // code goes here
    }
    return foo;
})(foo||{});

这将确保foo存在,将增加一个bar功能foo 如果foo之前不存在,则会创建它。 如果以前存在,则只是增加。

可以使用相同的逻辑来创建子模块,这更有意义。

===============>>#2 票数:3

阅读这本书的js模式:

http://addyosmani.com/resources/essentialjsdesignpatterns/book/

它的自由和伟大!

受dystroys答案的启发,我会对其进行一些更改并像这样写

var foo = (function () {

  // your private stuff here

  return {
    bar: function () {}
  };

})();

===============>>#3 票数:2

或者您可以这样做:

var foo = {
           bar : function() {
               // code goes here
          }
};

但这是一个对象文字,但是仍然可以用foo.bar()调用

===============>>#4 票数:1

我今天会这样写我的javascript模块:

(function(exports){

    exports.greet = function(){
        return 'hello beloved world'
    };

})(typeof exports === 'undefined'? this['uebermodule']={}: exports);

因此,您可以在浏览器以及node.js中使用您的lib

uebermodule.greet() // is uniform in node as in browser

Axel Rauschmayer博士就该主题写了文章。

  ask by David Pfau translate from so

未解决问题?本站智能推荐:

2回复

在javascript中创建名称空间

您知道如何在javascript中为构造函数对象创建名称吗? 我有个小提琴,请看一下。 http://jsfiddle.net/m8jLoon9/2/ 例如
2回复

JavaScript函数创建名称空间

下面是为模块创建名称空间的脚本,在parent = parent[parts[i]]之后,我不明白它是如何工作的,它如何创建嵌套? 有什么建议么?
2回复

JavaScript名称空间

在JavaScript中,从一个命名空间访问另一个函数或属性的最佳方法是哪种? 例:
4回复

如何在javascript / jQuery中创建名称空间和类

就像C#或Java一样,将我所有的jQuery代码放在一个.js文件中,如下所示: 因此,您可以通过以下方式调用它: 我有以下代码,但不起作用: 有可能在jQuery中吗? (类似或相似的建议/示例,以使我的jquery代码井井有条。)感谢您的时间和答复(对不起我的英语
2回复

在JavaScript中安全地创建名称空间

我知道为什么名称空间是好的-防止过多的全局定义并防止代码被覆盖,但是我试图进一步挖掘以下语法: 好的,第一行代码并不安全,因为MYAPPLICATION可以在其他地方或由其他库定义。 第二行检查它是否存在以及是否不存在,并使用新对象定义var MYAPPLICATION。 我
4回复

如何在JavaScript中创建名称空间?

我想通过使用访问变量 可以全球访问。 我相信Drupal会做类似的事情,不是吗?
1回复

创建名称空间Javascript单例类的对象

我是IIFE的新手,正在尝试在Siungleton JavaScript类上的JavaScript中实现名称空间: 我有一个JavaScript类(例如main类): 然后,我还有另一个JavaScript命名空间类: 我想在myIIFE创建一个myIIFE.InsideI
3回复

如何在JavaScript中创建顶级名称空间

所以现在我有3个javascript文件。 item.js,items.js,main.js。 他们的结构就像 var item = (function(){ //some functions inside and return statement })(); same go
3回复

如何附加到从闭包创建的JavaScript名称空间?

我有以下格式的名称空间,允许公共和私人成员: 输出: 我该如何将公共成员和私有成员都附加到这样的名称空间(即:来自不同文件)? 这是一个JSFiddle 。
6回复

如何创建全局javascript名称空间的实例?

我是一位负责javascript项目的C ++ / Java开发人员,我似乎无法弄清楚这个问题。 我怀着这样描述的通过直接分配定义了一个命名空间的JavaScript文件的工作在这里 所以这是我对一个过于简化的示例名称空间的尝试 这就是我想做的 该功能将输出