gpt4 book ai didi

javascript - 如何在 JavaScript ECS6 中声明命名空间

转载 作者:行者123 更新时间:2023-11-29 11:00:09 25 4
gpt4 key购买 nike

我习惯了以下语法,我相信它被广泛使用:

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 };

我发现使用这种语法时,智能感知在 Visual Studio Code 中工作非常方便。

任何人都可以看到此语法有任何问题吗?如果有,可以修改它并提出更好的语法吗?

我读了这篇文章 How do I declare a namespace in JavaScript?并发现了许多建议的语法,但大多数是在 ECS6 之前给出的。

最佳答案

在 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)。

关于javascript - 如何在 JavaScript ECS6 中声明命名空间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48599749/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com