Có cách nào để có một chức năng công khai từ mô-đun truy cập mô-đun riêng biến động không? test1 cho thấy những gì tôi muốn nói với "truy cập tự động", nhưng với các biến côngCó thể truy cập các biến riêng trong mô hình mô-đun động không?
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
tôi đã kết thúc với việc tạo ra một biến tư nhân duy nhất (một đối tượng) lưu trữ các biến riêng của tôi vì vậy tôi đã có thể truy cập chúng như
rằngprivateVarStore[privateVarName]
Nhưng có giải pháp nào khác cho điều đó không?
Để tránh các sự cố bảo mật, bạn nên thêm xác thực để tham số test2 thực sự là một biến đơn giản: return/^ [$ _ a-z] [$ _ a-z0-9] * $/i.test (a)? eval (a): không xác định; – HBP
@ HansBPUFAL: Ý tưởng tuyệt vời! Tôi chắc chắn sẽ thêm nó – qwertymk
+1, nhưng tôi có thể đề xuất ý tưởng xác thực thay thế: nếu bạn xác định một đối tượng liệt kê các biến riêng tư nào có thể được truy cập thông qua hàm công khai, như 'var accessList = {" x " : true, "y": true}; 'sau đó trong' hàm test2 (a) 'bạn có thể nói' return accessList [a]? eval (a): undefined; '- lợi thế là không chỉ điều này cung cấp bảo mật như những gì chuỗi có thể được chuyển đến eval, nó cho phép bạn xác định các biến thực sự riêng tư khác mà không thể truy cập thông qua' test2() ' . – nnnnnn