这是在javascript中创建名称空间的好方法吗?

这是在javascript中创建名称空间的好方法吗?,javascript,javascript-namespaces,Javascript,Javascript Namespaces,我一直在阅读大量关于在JavaScript中使用with关键字的帖子、问题和文章。有些文章警告不要使用Javascript的with关键字,因此我想知道我的使用是否合适 我的大部分编程经验都是用C#和Java编写的,所以在创建相关对象时,给它们命名对我来说很有意义 我尝试的方法是首先将根命名空间创建为全局可访问的对象。对象成员是一级名称空间,也是对象 在向名称空间添加对象时,我使用Javascriptwith关键字使参数的成员在with的范围内可以本地访问。在名称空间中移动时,可以使用s嵌套,并

我一直在阅读大量关于在JavaScript中使用
with
关键字的帖子、问题和文章。有些文章警告不要使用Javascript的
with
关键字,因此我想知道我的使用是否合适

我的大部分编程经验都是用C#和Java编写的,所以在创建相关对象时,给它们命名对我来说很有意义

我尝试的方法是首先将根命名空间创建为全局可访问的对象。对象成员是一级名称空间,也是对象

在向名称空间添加对象时,我使用Javascript
with
关键字使参数的成员在with的范围内可以本地访问。在名称空间中移动时,可以使用s嵌套
,并将参数设置为要输入的名称空间

以下是一个例子:

var Namespace = {
    SubNamespace1: {},
    SubNamespace2: {}

}
with (Namespace) {

    with (SubNamespace1) {

        SubNamespace1.FirstClass = {
            foo: function() {
                SecondClass.bar();
            },
            bar: function() {
                SecondClass.foo();
            }

        },
        SubNamespace1.SecondClass = {
            foo: function() {
                FirstClass.bar();
            },
            bar: function() {
                FirstClass.foo();
            }
        }
    }

    with (SubNamespace2) {

        SubNamespace2.FirstClass = {
            foo: function() {
                SecondClass.bar();
            },
            bar: function() {
                SecondClass.foo();
            }
        },
        SubNamespace2.SecondClass = {
            foo: function() {
                FirstClass.bar();
            },
            bar: function() {
                FirstClass.foo();
            }
        }
    }
}

不建议将
一起使用<代码>with
将在ES5 strict plus中抛出一个错误。最好不要用它。你不能用完整的路径吗?或者一个模块模式?读一读,它可能会帮助你建立一个坚实的名称空间