2012-06-27 193 views
2

我正在做一个JQuery插件来显示像growl这样的消息。要管理这些消息已经创建了一个类。因为它是一个插件,所以在创建一个全局变量来存储这个类的实例时有一些问题?最佳编码实践JavaScript

+2

你将需要提供比这更多的信息,如果你想这样一来就能帮助。显示一些代码,即将发布的一些特定问题(或错误消息),并告诉我们您尝试过哪些方法无效。 – kingcoyote

+0

你是否创建这个,以便你可以在你的应用程序中使用它?如果你也许你应该看看jGrowl :) – c0deNinja

+0

我做了一段时间的插件,但有一些错误,并希望改善它http://lucasmerencia.github.com/JQuery-Growl-Plugin/ –

回答

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; 
}; 
+0

但如果我需要使用单个实例来管理所有消息。例如,如果我两次调用插件,则需要对所有调用使用相同的实例。 可以用JavaScript实现单例模式吗? –

+0

呃,单身人士不需要一个班级我会说 - 只是使用一个平常的对象。但是这两种模式也适用于实例而不是类,你只需要选择它们是否应该公开。 – Bergi

2

全局通常是一个禁忌。在这里看到:

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

本质上讲,他们杂乱的命名空间,让你开到有您的全球覆盖的其他地方是因为你的变量可能最终会在相同的范围,因为其他脚本下降。该网站还提供了一些很好的例子来说明如何处理这个问题。

所以最后,最好的做法是不使用全局变量,而是将它们放在它们自己的名称空间中。 希望这可以帮助,很确定这就是你要求的/关于。