我正在考虑不同类型的命名空间,并想知道最好使用哪种。
我个人使用以下内容:
var App = {
foo: function(){},
bar: function(){}
}
但是我注意到一些大师正在使用一些不同的技术,我想知道为什么要采取额外措施。
var app = app || {}
是出于必要性还是复杂性?您建议使用哪种?
答案 0 :(得分:2)
你问的构造本身并不是命名空间。这只是一种不破坏现有值(或命名空间,如果你愿意)的方法。
如果您认为App
可能已经存在,并且您不想使用您的实现覆盖它,您可以使用以下内容:
var App = App || {};
App.foo = function(){};
App.bar = function(){};
当然,如果App
确实存在,并且具有属性foo
和/或bar
,那么您将会破坏这些属性。
正确的命名空间允许调用者决定调用什么内容。例如,假设您的项目要导出App
。但是如果调用者已经在使用App
呢?现在,有责任在他们上更改名称。一个更好的方法是让他们决定叫什么。 Node中的命名空间以这种方式工作:
var http = require('http');
var myHttp = require('http');
http
和myHttp
都是http
包的实例,但调用者可以决定实际调用它们。
Browserify(https://github.com/substack/node-browserify)项目允许在浏览器中使用Node样式的包,这非常方便。它似乎越来越受欢迎了。