변수 값을 사용하여 개체에 액세스하고 싶습니다.
myobject라는 개체가 있다고 가정 해 보겠습니다.
이 이름으로 변수를 채우고 변수를 사용하여 개체에 액세스하고 싶습니다.
예:
var objname = 'myobject';
{objname}.value = 'value';
답변
글로벌 :
myObject = { value: 0 };
anObjectName = "myObject";
this[anObjectName].value++;
console.log(this[anObjectName]);
글로벌 : v2
var anObjectName = "myObject";
this[anObjectName] = "myvalue"
console.log(myObject)
로컬 : v1
(function() {
var scope = this;
if (scope != arguments.callee) {
arguments.callee.call(arguments.callee);
return false;
}
scope.myObject = { value: 0 };
scope.anObjectName = "myObject";
scope[scope.anObjectName].value++;
console.log(scope.myObject.value);
})();
로컬 : v2
(function() {
var scope = this;
scope.myObject = { value: 0 };
scope.anObjectName = "myObject";
scope[scope.anObjectName].value++;
console.log(scope.myObject.value);
}).call({});
답변
변수 이름 주위에 대괄호를 사용하십시오.
var objname = 'myobject';
{[objname]}.value = 'value';
답변
전역 변수입니까? 그렇다면 실제로 window
개체의 일부 이므로 window[objname].value
.
함수에 국한된 경우 원하는 작업을 수행하는 좋은 방법이 없다고 생각합니다.
답변
개체는 일부 범위에 있으므로 거의 항상 다음 구문을 통해 변수에 액세스 할 수 있습니다.
var objname = "myobject";
containing_scope_reference[objname].some_property = 'some value';
이것이 까다로워지는 유일한 장소는 닫힌 범위에 있고 최상위 지역 변수에 액세스하려는 경우입니다. 다음과 같은 경우 :
(function(){
var some_variable = {value: 25};
var x = "some_variable";
console.log(this[x], window[x]); // Doesn't work
})();
당신은 할 수 사용하여 해당 이겨내는 eval
현재 범위 체인에 액세스하는 대신에 …하지만 당신이 테스트의 많은 일을했습니다 당신이하지 않으면 내가하지 않는 것이 좋습니다 알고 그 일에 대해 갈 수있는 가장 좋은 방법입니다 것을.
(function(){
var some_variable = {value: 25};
var x = "some_variable";
eval(x).value = 42;
console.log(some_variable); // Works
})();
당신의 가장 좋은 방법은 (같은 오브젝트 항상 – 수 -가에 진행에 이름을 참조하는 것입니다 this
전역 또는 로컬 범위에서 개인 최고 수준의 변수에) 넣어 모든 것을 거기에 다른 사람을.
그러므로:
var my_outer_variable = {};
var outer_pointer = 'my_outer_variable';
// Reach my_outer_variable with this[outer_pointer]
// or window[outer_pointer]
(function(){
var my_inner_scope = {'my_inner_variable': {} };
var inner_pointer = 'my_inner_variable';
// Reach my_inner_variable by using
// my_inner_scope[inner_pointer]
})();
답변
다음을 사용할 수 있습니다 eval
.
eval(variablename + ".value = 'value'");
답변
일반적으로이 작업을 수행 할 수 없습니다. 창 범위를 제외하고는 다음을 작성할 수 있습니다. window[objname].value = 'value';
답변
지역 변수에 대한 Shaz의 대답은 비 재귀 함수에서 작동하지만 이해하기 어렵다고 생각합니다. 더 명확하다고 생각되는 또 다른 방법이 있습니다 (하지만 여전히 그의 생각이고 똑같은 행동입니다). 또한 로컬 변수에 동적으로 액세스하지 않고 로컬 변수의 속성에 액세스합니다.
본질적으로 전역 변수 (함수 객체에 첨부)를 사용합니다.
// Here's a version of it that is more straight forward.
function doIt() {
doIt.objname = {};
var someObject = "objname";
doIt[someObject].value = "value";
console.log(doIt.objname);
})();
이것은 본질적으로 변수를 저장하기 위해 전역을 생성하는 것과 동일하므로 속성으로 액세스 할 수 있습니다. 이를 위해 글로벌을 만드는 것은 그러한 해킹입니다.
다음은 전역 변수를 생성하지 않고 대신 지역 변수를 사용하는 깔끔한 해킹입니다.
function doIt() {
var scope = {
MyProp: "Hello"
};
var name = "MyProp";
console.log(scope[name]);
}