2017-02-09 26 views
0

我正在使用Java Rhino,並且我有一個ScriptableScriptableObjectRhino從Scriptable中獲得價值,包括原型鏈

從這個對象我想檢索一個值,但該值不是直接在這個對象中,而是它在對象的原型鏈中的某個地方。

所以基本上我想在java代碼中做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

我在問'Java'代碼。這看起來像'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直至找到請求的值或者沒有更多的父原型。