動的にあなたが使用することができます。javascriptでローカルスコープに動的にアクセスするにはどうしたらいいですか?あなたはグローバル関数と変数を使用したい場合は
window[functionName](window[varName]);
それはローカルスコープ内の変数に同じことを行うことは可能ですか?
このコードは正しく動作しますが、現在はevalを使用していますが、他にどのように行うかを考えようとしています。
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]
なぜ私は今混乱していたのですか。なぜなら、変数abc AS WELLは戻り値の名前になっているからです。あなたはそれらの名前を変更する必要があります、それは私を混乱させるものでした。とにかく、私のものよりも良い答えが現れました。だから、私はこの時点でcrescentfreshにゆだねるつもりです。 –
@ゴートあなたがリンクしている質問は、何か違うことを求めています。彼がアクセスしようとしている変数はグローバル変数です。受け入れられた答えはグローバル変数も使用します。リンクされた質問は変更する必要があります。 – Annan