2009-09-24 8 views
1

글로벌 컨텍스트로 볼 수있는 특정 컨텍스트에서 JavaScript 기능/코드를 어떻게 실행할 수 있습니까? 이것은 (호출/적용) 변경과 동일하지 않습니다. 이는 '창'변경과 같습니다. 나는 다음과 같은 코드가있는 경우JavaScript : 특정 컨텍스트에서 코드 실행

기본적으로 :

(function() { x.value = 5; return value; })() 

은 코드 자체를 변경하지 않고 (귀국일 5)를 작동하게하는 방법은 무엇입니까?

또한 가능한 경우 x의 컨텍스트에서 코드를 실행하는 것이 내 생각이지만 어쩌면 다른 해결책이 있을까요?

UPDATE :

원래 문제 : 내가 셀레늄을 사용하여 북마크를 테스트하기 위해 노력하고 있습니다. 북마크는 내가 페이지에서 북마크를 얻을 $의 selenium.get_eval를 사용하여 실행하고 get_eval 전역 객체의 맥락에서 셀레늄의 일부 개체 자체가 아닌 창입니다

window.SomeObject = {...}; SomeObject.doSomething(); 

할 수 있다고 가정합니다. window.SomeObject 셀렌 컨텍스트 창 때문에 여전히 작동하지만 그냥 SomeObject 작동하지 않습니다.

다른 가능한 해결책을 알고 있다고 생각하지만 원래 질문에 대한 대답이 있는지 알고 싶습니다.

업데이트 2 (솔루션) : (geowa4에 의해 답변에 따라)

최종 솔루션 :

x = {}; with(x) { return (function() { x.value = 5; return value; })(); } 
+4

정확히 무엇을 하려는지 설명해 주시겠습니까? – dusoft

+0

우선,'x.value'를 설정했지만'value' 만 반환하므로 코드 *는 "5를 반환하지 않습니다". 두 번째로, 무엇? –

+0

게시물의 끝에 설명이 추가되었습니다. –

답변

2

당신은 with 키워드를 사용하여 범위를 변경할 수 있습니다.

(function() { x.value = 5; with(x) { return value; })(); 

with 키워드는 지정된 객체에 코드 블록을 스코프. 그래서이 경우 5를 반환 할 것입니다.

+0

> 코드 자체를 변경하지 않고? –

+1

@crescentfresh : 예,하지만 불가능합니다. 그래서 가장 가까운 옵션을 사용했습니다. 어둠 속에서 약간의 찌르다. – geowa4

+0

질문에 대한 자세한 내용을 추가했습니다. With는 아주 좋은 생각이지만 외부 범위에서 작동할까요? 내가 확인 할게요. –

관련 문제