C'è un modo per avere una funzione pubblica dal modello di modulo che accede dinamicamente alle variabili private? test1 mostra cosa intendo con "accesso dinamico", ma con variabili pubblicheÈ possibile accedere in modo dinamico a variabili private in un modello di modulo?
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
ho finito con la creazione di una sola variabile privata (un oggetto) memorizzare le mie variabili private quindi ero in grado di accedervi come quello
privateVarStore[privateVarName]
Ma esiste un'altra soluzione?
Per evitare problemi di sicurezza, sarebbe consigliabile aggiungere una convalida che il parametro per test2 sia effettivamente una variabile semplice: return/^ [$ _ a-z] [$ _ a-z0-9] * $/i.test (a)? eval (a): non definito; – HBP
@HansBPUFAL: ottima idea! Sarò sicuro di aggiungerlo – qwertymk
+1, ma posso suggerire un'idea di convalida alternativa: se definisci un oggetto che elenca quale delle variabili private è accessibile tramite la funzione pubblica, come 'var accessList = {" x " : true, "y": true}; 'quindi in' function test2 (a) 'puoi dire' return accessList [a]? eval (a): undefined; '- il vantaggio è che non solo fornisce sicurezza riguardo a quali stringhe possono essere passate a valutazione, ma ti permette di definire altre variabili veramente private a cui non è possibile accedere tramite' test2() ' . – nnnnnn