2013-07-26 10 views
2

我創建了一個具有擴展功能的jQuery插件,可以讓您基本上爲該插件創建插件。在JavaScript中動態創建私有方法

http://jsfiddle.net/eeBEJ/1/

如果你看看小提琴例子中,你將看到一個$.fn.wPluginTest.extend功能,允許您在功能通過擴展的原型。反正也有擴展本地名稱空間來添加私有方法嗎?

因此,例如前面_傳遞的任何函數都將被設置爲私有,並且不能通過PluginTest對象公開獲得。

回答

2

javascript對象沒有私有屬性,我想說讓它們只帶有下劃線前綴是可以的。

但是,你可以嘗試:

$.fn.wPluginTest.extend = function(funcs) { 
    var proto = PluginTest.proto, 
     priv = Object.create(proto); // a private namespace inheriting from proto 
    for (func in funcs) { 
     if (func.charAt(0) != '_') 
      PluginTest.prototype[func] = funcs[func].bind(priv); 
     else 
      priv[func.slice(1)] = funcs[func]; 
//     ^^^^^^^^^ not sure, might be confusing 
    } 
} 

然而,這些功能將無法訪問PluginTest例如他們呼籲 - 他們是靜態綁定的原型對象 - 所以它可能是一個壞理念。

如果任何插件需要真正的隱私,它應該使用自己的變量範圍。

+0

嗯,是的,我可能會更好地從另一端來處理這個問題,並且只有以'_'開頭的函數返回null。無論如何,所有對插件的調用都是通過getter/setter區域進行的。謝謝。 – Rob

+0

我想你根本不應該擔心這個問題。如果其中一個插件插件需要專用功能,則必須自行確定它們的範圍;否則你只是在複製公共方法。 – Bergi