わかりました、私は少し困惑しています。私はおそらく露骨に明らかな何かを見逃していますが、どうやら私は木のために森を見ることができないようです:
パラメータが配列であることを期待する JavaScript 関数を呼び出そうとしていますif (arg instanceof Array)...
。
Context cx = Context.enter();
Scriptable scope = cx.initStandardObjects();
String src = "function f(a) { return a instanceof Array; };";
cx.evaluateString(scope, src, "<src>", 0, null);
Function f = (Function) scope.get("f", scope);
Object[] fArgs = new Object[]{ new NativeArray(0) };
Object result = f.call(cx, scope, scope, fArgs);
System.out.println(Context.toString(result));
Context.exit();
そして悲しいかな、result
ですfalse
。
ここで何が欠けていますか?
編集:
もう少し情報:期待どおり両方[] instanceof Array
とnew Array() instanceof Array
戻ります。true
要素を配列に追加すると、JavaScript コードに正しいインデックス (ゼロから始まる数値) で表示されます。
NativeArray a = new NativeArray(new Object[]{ 42, "foo" });
この JavaScript 関数を使用して出力する場合:
function f(a) {
var result = [];
result.push(typeof a);
for (var i in a) {
result.push(i + ' => ' + a[i]);
}
return result.join('\\n');
}
結果は次のとおりです。
object
0 => 42
1 => foo
それでうまくいきます。「本当の」配列が欲しいことを除いて:)