JavaScript中命名空间处理的推荐方法?

时间:2012-12-06 11:24:00

标签: javascript namespaces resharper intellisense

我们在«命名空间»中组织了一组javascript«modules» - 以全局对象(窗口)为根的对象层次结构。

在某些情况下,我们使用实用程序createNs("namespace.name")(它的工作方式与YUI YAHOO.namespace完全相同),但我们使用无智能感知。 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);

什么是共同点解决方案?

  • 少写,

  • 有intellisense,

  • 有ReSharper的重构,

  • 没有第三方依赖。

有可能吗?

谢谢!

1 个答案:

答案 0 :(得分:0)

嗯,这是您的选择:

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

  2. 您可以尝试使用Visual Studio Intellisense for JavaScript(ReSharper | Options - > Environment | Intellisense | General - > Limited ReSharper IntelliSense - >打开除JavaScript之外的所有内容)。这只会影响Intellisense,所有其他ReSharper功能都将继续有效。

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

  4. 如果您没有使用/// <reference path="path-to/another-script.js" />,那么您可以使用

    之类的代码创建一个单独的JS文件(不会真正包含在任何地方)

    ourCompany.components.emails = {};