Nếu bạn muốn sử dụng chức năng toàn cầu và biến động bạn có thể sử dụng:Tôi làm cách nào để truy cập phạm vi địa phương động trong javascript?
window[functionName](window[varName]);
Có thể làm điều tương tự cho các biến trong phạm vi địa phương?
Mã này hoạt động chính xác nhưng hiện đang sử dụng eval và tôi đang cố gắng nghĩ cách khác để thực hiện.
var test = function(){
//this = window
var a, b, c; //private variables
var prop = function(name, def){
//this = window
eval(name+ ' = ' + (def.toSource() || undefined) + ';');
return function(value){
//this = test object
if (!value) {
return eval('(' + name + ')');
}
eval(name + ' = value;')
return this;
};
};
return {
a:prop('a', 1),
b:prop('b', 2),
c:prop('c', 3),
d:function(){
//to show that they are accessible via to methods
return [a,b,c];
}
};
}();
>>>test
Object
>>>test.prop
undefined
>>>test.a
function()
>>>test.a()
1 //returns the default
>>>test.a(123)
Object //returns the object
>>>test.a()
123 //returns the changed private variable
>>>test.d()
[123,2,3]
tôi nhận được lý do tại sao tôi đã nhầm lẫn bây giờ, đó là bởi vì bạn đang đặt tên các biến abc CŨNG NHƯ tên cho sự trở lại. Bạn nên thay đổi những cái tên đó, đó là điều khiến tôi bối rối. Dù sao, câu trả lời tốt hơn so với tôi đã xuất hiện, vì vậy tôi chỉ sẽ trì hoãn crescentfresh vào thời điểm này. –
@Gothdo Câu hỏi mà bạn liên kết đến là hỏi điều gì đó khác biệt. Các biến mà anh đang cố truy cập là các biến toàn cục. Câu trả lời được chấp nhận cũng sử dụng các biến toàn cầu. Câu hỏi được liên kết phải được thay đổi. – Annan