有沒有辦法從模塊模式動態訪問私有變量的公共功能? 測試1顯示了我的意思與「動態訪問」,但與公共變量是否可以動態訪問模塊模式中的私有變量?
var x = (function(){
var x=0, y=2, z=5;
return {
toast: 123,
test1: function(arg){
return this[arg];
},
test2: function(){
// ??
}
};
}());
console.log(x.test1("toast")); // 123
console.log(x.test2("y")); // should return 2
我結束了創建一個私有變量(一個對象)存儲我的私有變量,所以我能夠訪問他們這樣
privateVarStore[privateVarName]
但有沒有另一種解決方案呢?
爲了避免安全問題,建議添加一個驗證,即參數到test2確實是一個簡單的變量:return/^ [$ _ a-z] [$ _ a-z0-9] * $/i.test(a)? eval(a):undefined; – HBP 2011-12-25 05:56:27
@HansBPUFAL:好主意!我一定會把它加上 – qwertymk 2011-12-25 06:10:17
+1,但是我能否提出另一種驗證思路:如果你定義了一個列出哪些私有變量可以通過公共函數訪問的對象,比如'var accessList = {「x」 :true,「y」:true};'然後在'function test2(a)'你可以說'return accessList [a]? eval(a):undefined; - 優點是這不僅提供了可以傳遞給eval的字符串的安全性,還允許你定義其他真正的私有變量,這些變量不能通過'test2() 。 – nnnnnn 2011-12-25 11:55:30