我想在项目中实现 JavaScript 命名空间。我和我的同事都不是 JavaScript 专家,因此我们正在寻找一种简单有效的命名空间方法。可读性是一项巨大的资产,我们是 Java 开发人员,很容易成为 JavaScript 陷阱的猎物。
我们编写了以下概念证明:
<html><body><script>
var mynamespace = {};
mynamespace.variable = "inside mynamespace";
mynamespace.level1 = {};
mynamespace.level1.level2 = {};
(function(){
this.variable = "inside mynamespace.level1";
this.print = function(){ return "print() : " + this.variable };
}).apply(mynamespace.level1);
(function(){
this.variable = "inside mynamespace.level1.level2";
this.print = function(){ return "print() : " + this.variable };
}).apply(mynamespace.level1.level2);
// We can use "that" instead of "this"; however I do not see any benefit in doing it...
(function(){
if(!mynamespace.level1.level2b){ this.level2b = {}; var that = this.level2b };
that.variable = "inside mynamespace.level1.level2b";
that.print = function(){ return "print() : " + this.variable };
}).apply(mynamespace.level1);
document.write(mynamespace.level1.print() + "<br>"); // print() : inside mynamespace.level1
document.write(mynamespace.level1.variable + "<br>");// inside mynamespace.level1
document.write(mynamespace.level1.level2.print() + "<br>");// print() : inside mynamespace.level1.level2
document.write(mynamespace.level1.level2.variable + "<br>");// inside mynamespace.level1.level2
document.write(mynamespace.level1.level2b.print() + "<br>");// print() : inside mynamespace.level1.level2b
document.write(mynamespace.level1.level2b.variable + "<br>");// inside mynamespace.level1.level2b
document.write(mynamespace.variable + "<br>");// inside mynamespace
document.write(mynamespace.something + "<br>");// undefined
</script></body></html>
=== 问题 ===
Q1。你认为这是一个好方法吗?
Q2。我们会遇到什么陷阱吗?
Q3。您有更好的建议吗(请考虑简单性、可读性)?
非常感谢任何帮助。
干杯,
编辑: 我们将使用 jQuery。因此,我们会考虑使用 jQuery 的更好方法。