Rhino JavaScript의 Global Object에 객체 속성을 추가하려면 어떻게해야합니까?
-
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();
편집 : 젠장 캐치가있을 줄 알았어요! 마일즈의 제안은이 경우 진행될 것입니다.