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

时间:2012-04-02 20:18:13

标签: javascript jquery properties namespaces

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

以下是我的工作示例:

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

如您所见,本案例中的属性名称为“数据”。

这是使用javascript,jquery实现命名空间属性的好方法吗?

谢谢

3 个答案:

答案 0 :(得分:1)

使用jQuery.extend添加深度是否有任何特定原因?乍一看,您也可以使用对象单例来定义命名空间:

var myNamespace = {
    subNamespace: {
        data: "Value as string"
    }
};

答案 1 :(得分:1)

Addy Osmani是Javascript设计最佳实践的优秀作者,拥有多本免费电子书,并且有关于命名空间等主题的博客文章数不胜数。

他曾经是AOL的JS工程师,但最近宣布他将搬到谷歌。

这是他的一本书中专门针对Namespacing章节的链接,但我建议您查看他的主页。

http://addyosmani.com/resources/essentialjsdesignpatterns/book/#detailnamespacing

答案 2 :(得分:0)

如果您必须使用extend(),因为NameSpace对象已存在,请使用深度扩展:

$.extend( true, NameSpace, {
    subNameSpace : {
        data : {}
    }
});

不幸的是,您对正确命名对象的问题完全取决于项目。数据是其他开发人员不应该触及的吗?如果没有,那么一个约定是在名称的开头使用下划线。您将拥有多少subNameSpacedata将依赖于其中一个或全部。

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