2
我創建了一個具有擴展功能的jQuery插件,可以讓您基本上爲該插件創建插件。在JavaScript中動態創建私有方法
如果你看看小提琴例子中,你將看到一個$.fn.wPluginTest.extend
功能,允許您在功能通過擴展的原型。反正也有擴展本地名稱空間來添加私有方法嗎?
因此,例如前面_
傳遞的任何函數都將被設置爲私有,並且不能通過PluginTest對象公開獲得。
我創建了一個具有擴展功能的jQuery插件,可以讓您基本上爲該插件創建插件。在JavaScript中動態創建私有方法
如果你看看小提琴例子中,你將看到一個$.fn.wPluginTest.extend
功能,允許您在功能通過擴展的原型。反正也有擴展本地名稱空間來添加私有方法嗎?
因此,例如前面_
傳遞的任何函數都將被設置爲私有,並且不能通過PluginTest對象公開獲得。
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
例如他們呼籲 - 他們是靜態綁定的原型對象 - 所以它可能是一個壞理念。
如果任何插件需要真正的隱私,它應該使用自己的變量範圍。
嗯,是的,我可能會更好地從另一端來處理這個問題,並且只有以'_'開頭的函數返回null。無論如何,所有對插件的調用都是通過getter/setter區域進行的。謝謝。 – Rob
我想你根本不應該擔心這個問題。如果其中一個插件插件需要專用功能,則必須自行確定它們的範圍;否則你只是在複製公共方法。 – Bergi