Javascript 使用jQuery命名属性的最佳模式

Javascript 使用jQuery命名属性的最佳模式,javascript,jquery,properties,namespaces,Javascript,Jquery,Properties,Namespaces,我正在为我的项目中的几个脚本命名空间,在搜索了一段时间后,我不确定是否遵循了命名空间属性的最佳实践 以下是我所做工作的示例: var myNamespace = myNamespace || {}; $.extend(true, myNamespace, { subNamespace: { } }); $.extend(true, myNamespace.subNamespace, { data: {} }); $(

我正在为我的项目中的几个脚本命名空间,在搜索了一段时间后,我不确定是否遵循了命名空间属性的最佳实践

以下是我所做工作的示例:

   var myNamespace = myNamespace || {};

   $.extend(true, myNamespace, {
      subNamespace: {

      }
   });

   $.extend(true, myNamespace.subNamespace, {
      data: {}
   });

   $(document).ready(function () {
      myNamespace.subNamespace.data = "Value as string";

      alert(myNamespace.subNamespace.data);
   });
如您所见,本例中的属性名为“data”

这是用javascript、jquery在名称空间中实现属性的好方法吗


谢谢

您使用
jQuery.extend
添加深度有什么具体原因吗?乍一看,您最好使用对象单例定义名称空间:

var myNamespace = {
    subNamespace: {
        data: "Value as string"
    }
};
他是Javascript设计最佳实践的伟大作家,拥有几本免费电子书,并在诸如名称空间之类的主题上发表了无数博客文章

他曾是AOL的JS工程师,但最近宣布将转投谷歌

这里有一个链接专门指向他一本书中的名称空间章节,但我建议你也去看看他的主页


如果必须使用
extend()
,因为
名称空间
对象已经存在,那么请尽量使用deep extend:

$.extend( true, NameSpace, {
    subNameSpace : {
        data : {}
    }
});
不幸的是,如何正确命名对象的问题完全取决于项目。这些数据是其他开发者不应该接触的吗?如果不是,则一种约定是在名称的开头使用下划线。您将拥有多少
子名称空间
,并且
数据
将取决于其中一个或全部


如果要关闭
jQuery
对象的名称空间,则需要确定该方法是单独运行还是在一组选定对象上运行。如果前者只扩展
jQuery
,而后者则扩展
jQuery.fn

,我使用jQuery.extend,因为我希望能够在不同的步骤中构造子名称空间的属性和函数。对于您的解决方案,您必须定义在同一位置可以包含的所有子名称空间。在我的解决方案中,如果我在一个位置将一些函数和属性添加到另一个位置的同一名称空间中,我将不会覆盖前面步骤中定义的子名称空间。有可能我错了?!您不需要
jQuery.extend
来实现这一点:
var-top={};top.sub={};top.sub.data=‘随便什么’感谢您提供这些信息。当我在google中键入“Javascript名称空间”时,结果中的第一项始终是您提供的链接。这是我的参考资料,我还需要其他人对这个问题的建议。