我习惯了以下语法 - 我相信 - 广泛使用:
var foo = foo || {};
(function() {
foo.bar = function(){
return this;
};
foo.bar.prototype.stuff = null;
foo.bar.prototype.do = function(){...};
})();
可以在有或没有关闭的情况下完成。
我使用foo.bar.prototype.stuff语法,以便在构造函数本身中没有所有定义。
使用ECS6,我尝试了这种语法:
class Foo{};
class Bar{
constructor(){
this.stuff = null;
}
get moreStuff(){ return this.stuff++;}
do(){...}
}
Foo.Bar = Bar;
module.exports = { Foo };
我发现使用这种语法时,intellisense在Visual Studio Code中非常方便。
任何人都可以看到这种语法的任何问题,如果是这样修改它提出了一个更好的吗?
我阅读了这篇文章How do I declare a namespace in JavaScript?并发现了许多提议的语法,但大多数是在ECS6之前给出的。
答案 0 :(得分:2)
在ES2015 +中,主要的是你不再需要这些假命名空间了。相反,使用模块。 (也许使用模块加载器,因为对模块的原生支持仍然只是进入浏览器。)
但是如果你想继续使用假命名空间,也许是暂时的,直到对模块的原生支持变得更加普遍,你所拥有的就好了,尽管用Foo
声明class
没有真正的优势。只需将其作为原始示例中的对象:
var Foo = Foo || {};
Foo.Bar = class Bar{
constructor(){
this.stuff = null;
}
get moreStuff(){ return this.stuff++;}
do(){...}
};
但是你的版本很好,除了给人的印象是Foo
可以用来构造有用的东西,除了你在两个文件中这样做的事实,它会失败(而你的第一个例子使用var foo = foo || {};
很高兴您在两个文件中执行此操作,并将它们包含在同一页面上,可能是一个foo.Something
定义,另一个定义foo.SomethingElse
。)