5

JSで変数変数名を作成する必要があります...

obj = {};
obj.fooonex = {};
obj.fooonex.start = 1;
obj.fooonex.end = 2;

a = "foo";
b = "one";
c = "x";

test = a + b + c;

alert(obj.test.start);

結果を「1」にしたい

ここでフィドル:http://jsfiddle.net/mR6BH/

4

2 に答える 2

10

あなたがする必要があります:

alert(obj[test].start);
于 2013-03-22T02:02:58.787 に答える
-1

一般的な 2 つの修正、つまり、より堅牢なソリューション

グープ!文字列としてのすべてのものでさえ!!!
上記の問題から、objectname、propertyname を文字列 Jang に拡張しています! ...

objectname = "obj";
propertyname = "start";

// alert(get(objectname + "." + test + "." +propertyname)); を試してください。

function get(path) {
    var next = window;

    path = path.split(/[\[\]\.]+/);

    if (path[path.length - 1] == "") {
        path.pop();
    };

    while (path.length && (next = next[path.shift()]) && typeof next === "object" && next !== null);

    return path.length ? undefined : next;
}

もう一つ

   function getPropertyValueByPath (obj, path)
    {
        path = path.split(/[\[\]\.]+/);

        if(path[path.length - 1] == "")
        {
            path.pop();
        };

        while(path.length && ( obj = obj[path.shift()]));

        return obj;
    }

使用法

 alert(getPropertyValueByPath(obj,test+ "." + propertyname ));
 alert(get(objectname + "." + test + "." +propertyname));

非推奨の方法

eval(objectname + "." + test + "." +propertyname )

Another way `eval("obj." + test + ".start")`
a way of insecure and non-advised eval()
于 2013-03-22T02:07:33.503 に答える