【问题标题】:Recommended approach for namespace handling in JavaScript?JavaScript 中命名空间处理的推荐方法?
【发布时间】:2012-12-06 11:24:00
【问题描述】:

我们有一组 javascript «modules» 组织在 «namespaces» — 根植于全局对象(窗口)的对象层次结构。

在某些情况下,我们使用实用程序 createNs("namespace.name")(它的工作原理与 YUI YAHOO.namespace 完全相同),但是我们没有 IntelliSense。 ReSharper 也无法解决此类问题。

目前,让 IntelliSense 工作的唯一方法是编写非常麻烦的内容,如下所示:

// module with no dependencies:
(function (window) {
    var ourCompany = window.ourCompany || (window.ourCompany = {});
    var components = ourCompany.components || (ourCompany.components = {});
    var emails = components.emails || (components.emails = {});
    emails.inbox = {
        checkNew: function () { }
    };
})(window);

// consumer:
(function (window) {
    window.ourCompany.components.emails.inbox.checkNew();
})(window);

另一种选择是使用jQuery.extend 方法,该方法并不总是可用:

// depends on jquery:
(function (window, $) {
    $.extend(true, window, {
        ourCompany: {
            components: {
                emails: {
                    inbox: {
                        checkNew: function () { }
                    }
                }
            }
        }
    });
})(window, jQuery);

什么是公分母解决方案?

  • 少写,

  • 有智能感知,

  • 有 ReSharper 的重构,

  • 没有第三方依赖。

有可能吗?

谢谢!

【问题讨论】:

    标签: javascript namespaces resharper intellisense


    【解决方案1】:

    好吧,这是你的选择:

    1. 您可以编写一个 R# 插件来解析您的实用程序方法。如果你有兴趣,我可以告诉你去哪里找。

    2. 您可以尝试使用 Visual Studio Intellisense for JavaScript(ReSharper | 选项 -> 环境 | Intellisense | 常规 -> 有限 ReSharper IntelliSense -> 打开除 JavaScript 之外的所有内容)。这只会影响 Intellisense,所有其他 ReSharper 功能将继续工作。

    3. 在 ReSharper 7.1 中,我们为 Intellisense 提供了在 JS 文件中遇到的所有标识符。也许对你来说就足够了。

    4. 如果你没有使用/// <reference path="path-to/another-script.js" />,那么你可以创建一个单独的 JS 文件(不会真正包含在任何地方),代码如下:

      ourCompany.components.emails = {};

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-08-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-03-16
      • 2012-07-01
      • 1970-01-01
      相关资源
      最近更新 更多