2014-03-19 3 views
0

간단한 문제 저는 오늘날까지 달렸고 해결책이 무엇이든 배웠던 적이 없으므로 저를 배제 해 버렸습니다.자바 스크립트의 객체 값을 기반으로 변수를 선언하십시오.

내가 들어 가지 않는 이유 때문에 개체에서 값을 가져 와서 새 변수의 이름으로 사용해야합니다. 1 톤을 반복 할 것이므로 반복 할 필요가 있습니다. 그래서 같은 개체에서 예를 들어

obj = { 
    "name": "object101" 
}; 

는 내가 그 벗어나고 싶은 것은, 새로운 VAR의 이름 object101되는 방식으로 var에 선언이다

"var object101 = // stuff" 

하지만 "var obj.name = // stuff"이 작동하지 않습니다. 점이 유효하지 않습니다.

나는 또한 var name = obj.name;처럼 자신의 var에 object101을 넣으려고했다.

내용이 잘 유지됩니다. 그러나 그때 나는 즉시가는 재미있는 문제를 보았다. var name = // stuff

단지 "이름"을 재정의하고 이름의 내용을 넣지 않는다. console.log("var "+name+" = stuff");과 같은 콘솔 로그에서 올바르게 렌더링됩니다.이 코드는 코드에 직접 쓰고 싶지만,이 경우에는 var로 실제 코드에서이 문제가 발생합니다.

그래서 var를 선언 할 때 이름을 제공 할 수있는 방법이 매우 부족한 것 같습니다. 어쩌면 매우 간단한 구문 일 수도 있고, 아니면 거기에 다른 개체를 기반으로 var 선언 이름을 동적으로 만드는 프로세스가있을 수도 있습니다. 나는 js의 공평한 분배를 끝냈고 결코 var [complex syntax resulting in name] =을 보지 못했습니다. 항상 간단합니다.

하지만이 정확한 문제에 대한 검색은 지금까지 아무 것도 모릅니다. 나에게 계몽 할 수있는 사람?

+3

소리가 XY 문제와 유사합니다. 존재하지 않기 때문에 그 구문을 본 적이없는 이유가 있습니다 ... 왜 이것을하고 싶습니까? 어쩌면 우리는 실제 문제에 대한 해결책을 찾을 수 있습니다. – elclanrs

답변

2

와우, 너 정말하고 싶은 생각을하고 싶지는 않지만 여기에 있습니다.

브라우저에서 작동하면서 변수가 전역 범위에 있도록하려면 다행히도 전역 범위의 이름은 window입니다.

당신은이 작업을 수행 할 수 있습니다 당신은 로컬 범위에서 그것을 원하는 경우

window[obj.name] = 'stuff'; 

, 당신은 거의-금지 키워드 with를 사용할 수 있습니다

var f = function(obj, b) { 
    var fake_scope = {}; 
    with (fake_scope) { 
    fake_scope[obj.name] = b; 
    console.log(d); 
    } 
} 

f({ name : 'd' } , 3) 

가를 인쇄합니다 3.

로컬 범위가 필요하고 with을 사용하고 싶지 않은 경우 eval으로 해결해야합니다.

하지만 진지하게 말씀 드리면, remember.

+0

좋은 답변입니다. +1 – sabof

+0

감사합니다 Malvolio! "Scope [ObjectReference] ="구문은 필자가 본 적이 없으므로 여기에서 이해해야했습니다. [내가 필요로하는 것을] (http://jsfiddle.net/2yfFp/), 잘하면 당신의 대답은 내가 그랬던 것처럼 같은 배에있는 다른 누구에게나 유용 할 것입니다. – user2844700

+0

@ user2844700 - 좋아, 좋아, 좋아하지만, 너와 같은 배에있는 다른 사람들이 빙산을 향하고 있다고 걱정하기 때문에 조심해야 해. – Malvolio

1

글쎄, 과학의 이익 :

(function() { 
    var dynaVarName = 'testName'; 
    eval('var ' + dynaVarName + ';'); 
    eval(dynaVarName + ' = 5;'); 
    eval('console.log(' + dynaVarName + ');'); // => 5 
}()); 

testName // => ReferenceError 

는 그래서 그래, 당신은 실제로 식에 따라 이름의 지역 변수를 만들 수 있습니다. 나는 이것을하는 것의 이점을 상상할 수 없다.

+1

"eval"때문에 Downvoted? 누군가 자랄 필요가 있습니다. – sabof

+2

글쎄, 나는 당신을지지했다. 그러나 [이 이미지] (http://i.imgur.com/V0qwXiw.jpg)는이 문제에 대한 나의 의견을 표현한다. – Malvolio

+0

두 번째 * eval * 문은 필요하지 않으며 첫 번째 문항 만 필요합니다. – RobG

관련 문제