2017-02-09 2 views
0

Java Rhino를 사용하고 있는데 Scriptable 또는 ScriptableObject입니다.Rhino에서 프로토 타입 체인을 포함한 Scriptable의 가치 얻기

이 개체에서 값을 검색하고 싶지만 값은이 개체에 직접있는 것이 아니라 개체의 프로토 타입 체인 어딘가에 있습니다.

그래서 기본적으로 자바 코드에서 object.get("key", object)을 원하지만 프로토 타입 체인에서 값을 반환합니다 (이 객체에없는 경우). 이 get 메소드 상태의

워드 프로세서 :이 방법은 프로토 타입 체인을 통과 할 것으로 예상되지 않는다는 것을

참고.

그러나 불행히도이 작업을 수행하는 방법을 말하지 않는다 ...

나는 내 자신의 코드를 작성할 수 :

  • 체크 발견되지 않는 경우는
  • 대상 : 이동을 그 프로토 타입
  • 값이 발견되거나 프로토 타입이 더 이상 없을 때까지 이것을 반복하십시오.

하지만 궁금 해서요 ... Rhino에 이미 이런 방법이 있을까요?

이 방법은 어디에 있습니까?

답변

0

시도해 보셨습니까?

objArray = Object.getOwnPropertyNames(scriptableObject.prototype); 
for(var i = 0; i < objArray.length; i++){ 
if(objArray[i] == "whateverProperty") 
log(i + " " + scriptableObject.prototype[i]); 
} 

이렇게하면 개체의 프로토 타입을 항상 검사하는 방법입니다.

+0

나는'자바'코드에 대해 물었다. 이것은'JavaScript'와 같습니다. 그러나 이것이 결국 Java 인 경우에는 여러 실수가 있습니다 ... –

0

마지막으로 저는 직접 함수를 구현했습니다. 지금은 다음과 같습니다 : 그 중 하나가 요청 된 값을 찾거나 더 이상 부모의 프로토 타입이 없을 때까지

private Object getRecursive(Scriptable context, String name, Scriptable rootScope) { 
    Object result; 
    do { 
     result = context.get(name, rootScope); 
     context = context.getPrototype(); 
    } while (result == UniqueTag.NOT_FOUND && context != null); 
    // continue as long as the result is NOT_FOUND and there is another parent prototype 
    return result; 
} 

그것은 주어진 context 객체와 그 부모 prototypes를 반복합니다.