为javascript库创建名称空间
我正在尝试创建一个库foo.js,其中包含一个函数foo.bar,我可以这样调用它:为javascript库创建名称空间,javascript,Javascript,我正在尝试创建一个库foo.js,其中包含一个函数foo.bar,我可以这样调用它: <script src="foo.js"></script> <script> baz = foo.bar(); </script> 这是我在其他地方看到的一种模式,尽管我不能说我完全理解正在发生的事情。当我尝试使用它时,我被告知当我尝试定义foo.bar时,foo没有定义。我遗漏了什么?有太多可能的模式,无法确定您想要哪一种 您可以这样做,例如: va
<script src="foo.js"></script>
<script>
baz = foo.bar();
</script>
这是我在其他地方看到的一种模式,尽管我不能说我完全理解正在发生的事情。当我尝试使用它时,我被告知当我尝试定义foo.bar时,foo没有定义。我遗漏了什么?有太多可能的模式,无法确定您想要哪一种 您可以这样做,例如:
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存在,并向foo添加一个bar函数。如果foo以前不存在,它就被创建了。如果它以前存在,它只是被扩充了
同样的逻辑可以用来创建子模块,这样就更有意义了。或者您可以这样做:
var foo = {
bar : function() {
// code goes here
}
};
但这是一个对象文字,但仍然可以用foo.bar调用阅读本书了解js模式: 它是免费的,而且很棒 受dystroys答案的启发,我将对它稍加修改,然后这样写
var foo = (function () {
// your private stuff here
return {
bar: function () {}
};
})();
我今天会这样编写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
就这个话题写的。foo和foo,这是一个令人困惑的世界+我喜欢这个图案。然后还有原型、文字和其他一百种可供选择的方法,它们的作用几乎相同。对于简单的事情,我总是使用对象文字,因为我认为它更容易理解和跟踪,但我想这只是一个意见问题。你需要返回你的内心世界!dystroy生来就有他所有的内在食物,所以他不需要归还任何东西,你需要把你的内在食物归还给dystroy。意大利面条++,不是这样做的。foo.bar必须是this.bar。并使用new创建它的新实例,而不是使用foo作为参数。
uebermodule.greet() // is uniform in node as in browser