2017-02-09 4 views
0

Java Rhinoを使用していますが、ScriptableまたはScriptableObjectがあります。RhinoはScriptableからプロトタイプチェーンを含む値を取得します

このオブジェクトからは値を取得したいが、値はこのオブジェクトには直接はなく、代わりにオブジェクトのプロトタイプチェーンのどこかにある。

基本的に私はobject.get("key", object)をJavaコードで実行したいが、このオブジェクトに存在しない場合はプロトタイプチェーンから値を返す。

この取得方法状態のドキュメント:このメソッドは、プロトタイプチェーンを通過すると予想されていないことを

注意。

しかし残念ながら、それは、これを行います...

私は自分自身のコードを書くことができた方法は言っていない:そのに行く:

  • 見つからない場合は、オブジェクト
  • をチェックプロトタイプ
  • 値が見つかるか、プロトタイプがなくなるまでこれを繰り返します。

しかし、私は不思議に思っていました...このような方法はすでに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をループ。

関連する問題