【问题标题】:Best pattern to namespacing a property with jQuery使用 jQuery 命名属性的最佳模式
【发布时间】:2012-04-16 12:21:51
【问题描述】:

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

这是我所做的一个示例:

   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 在命名空间中实现属性的好方法吗?

谢谢

【问题讨论】:

    标签: javascript jquery properties namespaces


    【解决方案1】:

    您使用jQuery.extend 来增加深度有什么特别的原因吗?乍一看,你还不如使用对象单例来定义命名空间:

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

    【讨论】:

    • 我使用 jQuery.extend 是因为我希望能够在不同的步骤中构建 subNamespace 的属性和功能。使用您的解决方案,您将必须定义所有子命名空间可以包含在同一个位置。使用我的解决方案,如果我在一个地方添加一些函数和属性,而在另一个地方将其他一些函数和属性添加到同一个命名空间,我将不会覆盖前面步骤中定义的子命名空间。有可能是我错了吗?!
    • 您不需要jQuery.extend 来执行此操作:var top = {}; top.sub = {}; top.sub.data = 'whatever';
    【解决方案2】:

    Addy Osmani 是一位出色的 Javascript 设计最佳实践作者,拥有多本免费电子书,并发表了无数关于命名空间等主题的博客文章。

    他曾经是 AOL 的 JS 工程师,但最近宣布他将转到 Google。

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

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

    【讨论】:

    • 感谢您提供这些信息。当我在 google 中输入“Javascript 命名空间”时,结果中的第一项始终是您转发的链接。这是我的参考,我仍然需要其他关于 subjet 的建议。
    【解决方案3】:

    如果一定要使用extend(),因为NameSpace对象已经存在,那就用deep extend来做最充分的:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-04-16
      • 1970-01-01
      • 2022-01-23
      • 1970-01-01
      • 2010-09-07
      相关资源
      最近更新 更多