1

私のコード (Firefox 拡張機能の JavaScript) 内には、次のようないくつかの変数のリストがあります。

var myApp = {
 var1: true,
 var2: false,
 var3: true,
 var4: false
};

これらの変数にアクセスして、関数を使用して間接的に値を取得したいと考えています。

var myApp = {
 var1: true,
 var2: false,
 var3: true,
 var4: false,

 varGetter: function(aName) {
  // code
  return myApp.aName.value;
 }
};

たとえば、この関数を次のように呼び出します。

if(myApp.varGetter("var2")) {alert("true")};

さて、私が望むことを行うためにこの関数をどのように実装できますか?

4

4 に答える 4

1

問題は、ドット表記と変数を使用してプロパティにアクセスしようとしていることです。

myApp.aName.value;

これにより、新しいプロパティが作成されるか、返されることがありますundefined

代わりにこの表記法を使用する必要があります

myApp[aName];
于 2014-12-24T00:17:28.390 に答える
1

myApp[aName]プロパティ名として変数を使用するために使用できます。

var myApp = {
 var1: true,
 var2: false,
 var3: true,
 var4: false,

 varGetter: function(aName) {
  return myApp[aName];
 }
};

console.log(myApp.varGetter("var1")); // true

また、関数のハードコーディングを避けるためmyAppに、 に置き換えることができますthis[aName]

于 2014-12-24T00:06:40.677 に答える
0

カプセル化 (変数をプライベートに保つ) が必要な場合は、モジュール patternを使用する必要があります。これにより、次のようになります。

var myApp = (function(){
    //you can't access those variable doing myApp.var1 for example
    var data = {};
    data.var1 = true;
    data.var2 = false;
    data.var3 = true;
    data.var4 = false;

    //then explicitly make your getter/setter
    function varGetter(varName){
        return data[varName];
    }

    //finally, return an object into myApp, out of this closure
    return {
        varGetter : varGetter
    };
})()
于 2014-12-24T00:12:50.460 に答える
0

window 変数を介してグローバル変数にアクセスできます。例:

var foo = 'asdf';
alert(window['foo']);

json 変数を取得するには、同じ表記法を使用します。

var myApp = {
 var1: true,
 var2: false,
 var3: true,
 var4: false
};

function varGetter(name) {
    return myApp[name];
}

編集:質問を読み間違えました。

于 2014-12-24T00:08:25.413 に答える