2

我正在做一个 JQuery 插件来显示像咆哮这样的消息。管理这些消息已经创建了一个类。因为是插件,所以创建一个全局变量来存储这个类的实例有什么问题吗?

4

2 回答 2

3

有两种解决方案:

  • 使类成为闭包范围内的私有/局部变量(标准):

(function($) {
    function MyClass() {...};
    $.fn.myPlugin = function(opts) {
        var instance = new MyClass();
        ...
        return this;
    };
})(jQuery);
  • 使用类的 jQuery 命名空间(注意现在每个人都可以实例化它,只有在它应该是公共的时候才这样做):

jQuery.MyPluginClass = function() {...};
jQuery.fn.myPlugin = function(opts) {
    var instance = new jQuery.MyPluginClass();
    ...
    return this;
};
于 2012-06-27T19:28:05.480 回答
2

全局变量通常是禁忌。看这里:

http://dev.opera.com/articles/view/javascript-best-practices/#avoidglobals

从本质上讲,它们使命名空间变得混乱,并让您可以在其他地方覆盖全局,因为您的变量最终可能会落入与其他脚本相同的范围内。该网站还提供了一些很好的例子来说明如何处理这个问题。

所以总而言之,最佳实践是不使用全局变量,而是将它们放在自己的命名空间中。希望这会有所帮助,很确定这就是您所要求的/关于的。

于 2012-06-27T19:26:04.797 回答