命名空间的差异

时间:2014-02-12 04:53:59

标签: javascript performance namespaces

我正在考虑不同类型的命名空间,并想知道最好使用哪种。

我个人使用以下内容:

var App = {

    foo: function(){},
    bar: function(){}

}

但是我注意到一些大师正在使用一些不同的技术,我想知道为什么要采取额外措施。

 var app = app || {}

是出于必要性还是复杂性?您建议使用哪种?

1 个答案:

答案 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');

httpmyHttp都是http包的实例,但调用者可以决定实际调用它们。

Browserify(https://github.com/substack/node-browserify)项目允许在浏览器中使用Node样式的包,这非常方便。它似乎越来越受欢迎了。