업데이트 함수/클래스의 코드는 문자열로 저장되므로 직접 호출 할 수 없습니다. 이 아이디어는 객체에 대한 내성 검사를 수행하고 함수 일 때 작동하지만 아래에있는 것과 같은 변수가 eval되었을 때 작동하지 않는 데이터 멤버를 열거하는 것입니다.eval은 undefined 대신 변수 이름을 반환합니다. (javascript)
자바 스크립트에서 개체를 평가하려고합니다. 이 같은.
var myObj {
greet: "Greeting",
myPrint: function() {
alert("hello");
}
};
아이디어는 평가에서 이것을 실행할 수와 변수 이름 어떻게 든 (myObj로) 또는 생성 된 객체를 얻는 것입니다. 나는 eval을 사용하는 다양한 방법으로 실험했지만 이것을 이해할 수는 없다. 이런 식으로 할 때 작동합니다.
function myObj() {
this.greet = "Greeting";
this.myPrint = function() {
alert("hello");
}
};
eval ("("+ code + ")"); 여기서 code는 위의 함수를 포함하는 문자열로 myObj()를 반환합니다.
업데이트 2 그래서 기본적으로 나는 이와 같은 것을 평가하려고합니다. eval ("var x = 5"); x를 얻으려고합니다. 문자열이 평가되기 때문에 창 네임 스페이스에 추가 되더라도 문자열을 파싱하는 것만 빼면 해독 할 방법이 없습니다. 이제 이것은 간단한 예제 일뿐입니다.하지만 말했듯이, 첫 번째 코드에서는 약간 어렵습니다. 내가 말한대로 ... eval ("function test() {return 'hello';}"); return test()는 "var x = 5"문에서 기대하는 것과 비슷합니다.
누락 된 첫 번째 사례에 대해 이와 유사하게 수행 할 수있는 방법이 있습니까? 감사합니다.
뭘하고 싶은지 잘 모르겠지만 좀 더 긴급한 질문은 * 왜 * 이걸하고 싶니? 무엇을 해결하려고합니까? –
기본적으로 클래스/함수의 모든 데이터 멤버를 조사하고 싶습니다. 그러나 코드는 실제로 임의적이며 인트로 스펙 션 (indrospect)해야하는 텍스트 상자에 붙여 넣어집니다. (모든 데이터 멤버를 표시 할 수있는 IDE의 일종의 기능이라고 생각하면됩니다.) 임의 코드 실행은 eval에서 위험하다는 것을 알고 있지만 이것은 완전히 다른 목적을위한 것입니다. – ssarangi
'myObj' 코드가 유효한 자바 스크립트가 아닙니다. 오타라고 가정하는 것이 안전할까요, 아니면 어떻게 든 평가할 필요가있는 실제 콘텐츠입니까? –