Есть ли способ публичной функции из модуля-шаблона, который динамически обрабатывает частные переменные? test1 показывает, что я имею в виду с «доступом динамически», но с публичными переменнымиВозможно ли доступ к частным переменным в шаблоне модуля динамически?
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
@ HansBPUFAL: Отличная идея! Я обязательно добавлю его – qwertymk
+1, но могу ли я предложить альтернативную идею проверки: если вы определяете объект, который указывает, к какой из частных переменных можно получить доступ через публичную функцию, например, 'var accessList = {" x " : true, "y": true}; 'then in' function test2 (a) 'вы можете сказать' return accessList [a]? eval (a): undefined; 'преимущество заключается в том, что это не только обеспечивает безопасность в отношении того, какие строки могут быть переданы в eval, но и позволяет определить другие действительно частные переменные, к которым невозможно получить доступ через' test2() ' , – nnnnnn