Rhino JavaScript의 Global Object에 객체 속성을 추가하려면 어떻게해야합니까?

StackOverflow https://stackoverflow.com/questions/1162998

  •  18-09-2019
  •  | 
  •  

문제

글로벌 네임 스페이스에 추가하고 싶은 객체에 속성이 있습니다. 브라우저의 JavaScript에서 나는 그것을 window 그렇게 같은 개체 :

var myObject = {
  foo : function() {
    alert("hi");
  }
  // and many more properties
};

for (property in myObject) {
  window[property] = myObject[property];
}

// now I can just call foo()
foo();

그러나 Rhino는 글로벌 창 객체가 없기 때문에 그렇게 할 수 없습니다. 이를 달성 할 수있는 동등한 대상이나 다른 방법이 있습니까?

도움이 되었습니까?

해결책

당신은 사용할 수 있습니다 this, 현재 함수가 객체의 메소드로 호출되지 않은 경우 글로벌 오브젝트를 나타냅니다.

다른 팁

나는 다소 화려한 해결책을 찾았다 nczonline:

function getGlobal(){
  return (function(){
    return this;
    }).call(null);
}

이 기능의 핵심은이 개체가 사용할 때마다 항상 글로벌 객체를 가리킨다는 것입니다. call() 또는 apply() 그리고 첫 번째 논쟁으로 Null을 통과하십시오. 널 범위가 유효하지 않으므로 통역사는 전역 객체를 삽입합니다. 이 함수는 내부 기능을 사용하여 범위가 항상 올바른지 확인합니다.

호출을 사용하여 :

var glob = getGlobal();

glob 그런 다음 돌아옵니다 [object global] 코뿔소에서.

과거에 내가 한 방법은 다음과 같습니다.

// Rhino setup
Context jsContext = Context.enter();
Scriptable globalScope = jsContext.initStandardObjects();

// Define global variable
Object globalVarValue = "my value";
globalScope.put("globalVarName", globalScope, globalVarValue);

당신은 자신의 것을 정의 할 수 있습니다 window 최상위 변수로 개체 :

var window = {};

그런 다음 원하는대로 값을 할당 할 수 있습니다. ( "window"아마도이 상황에서 최고의 변수 이름은 아닐 것입니다.)

또한보십시오: Java6 Rhino 스크립트 엔진에서 실행되는 JavaScript 용 'Window'객체를 만들 수 있습니까?

나는 Rhino를 사용하지 않았지만 Var를 사용할 수 없습니까?


var foo = myObject.foo;
foo();

편집 : 젠장 캐치가있을 줄 알았어요! 마일즈의 제안은이 경우 진행될 것입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top