我正在使用Rhino将javascript对象解析为我的Java应用程序,并希望了解Scriptable对象的get方法的行为。
我的javascript对象与此类似:
Obj = {};
Obj['001'] = 'First Content';
Obj['100A'] = 'Second Content';
Obj['100'] = 'Third Content';
正如in the documentation所述,我应该使用带整数和Scriptable开头的签名。
JavaScript代码| Java代码
a [3] | a.get(3,a)
a [“3”] | a.get(3,a)
我的问题是:为什么带有String参数的签名不能与数字字符串匹配?
我的解决方案是正确的还是只能使用(String name,Scriptable start)签名?
// Scriptable scope already defined
// id is an object from scope.getIds()
Scriptable content;
if(id instanceof Integer) {
content = scope.get((Integer) id, scope);
} else {
content = scope.get((String) id, scope);
}
谢谢
Rhino 1.7R2
答案 0 :(得分:1)
我意识到这并没有明确地解决你的问题(这是你想要理解的),但我想建议你决定不理解。
只需像这样实施Scriptable.get(int,Scriptable)
:
Object get(int index, Scriptable start) {
return this.get(String.valueOf(index),start);
}
......不要再担心了。这个奇怪的双API用于属性访问可能存在一些古老的性能原因。请记住,Rhino的根很老,回到Netscape(!)试图用Java重写Netscape Navigator(!)的时候。 JavaScript标准中的数字属性和其他属性没有区别,因此在我看来,您最好不要在对象中匹配语言的行为,而不要担心Rhino的特性。