2012-06-27 242 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

本質上講,他們雜亂的命名空間,讓你開到有您的全球覆蓋的其他地方是因爲你的變量可能最終會在相同的範圍,因爲其他腳本下降。該網站還提供了一些很好的例子來說明如何處理這個問題。

所以最後,最好的做法是不使用全局變量,而是將它們放在它們自己的名稱空間中。 希望這可以幫助,很確定這就是你要求的/關於。