Как я называю метод экземпляра Java от JavaScript?

Я использую Носорога Mozilla эмулятор JavaScript. Это позволяет мне добавлять методы Java к контексту и затем называть их, как будто они были функциями JavaScript. Но я не могу заставить это работать кроме тех случаев, когда я использую статический метод.

Проблемой является эта часть документации:

Если метод не будет статическим, Java, то 'это' значение будет соответствовать JavaScript 'это' значение. Любая попытка вызвать функцию с 'этим' значением, которое не имеет правильного типа Java, приведет к ошибке.

По-видимому, мой Java, "это" значение не соответствует тому в JavaScript и я понятия не имею, как заставить их соответствовать. В конце я хотел бы создать экземпляр в Java и установить несколько методов от него в глобальной области видимости, таким образом, я могу инициализировать экземпляр от Java, но использовать его в моих сценариях.

У кого-либо есть некоторый пример кода для этого?

9
задан Aaron Digulla 9 August 2010 в 16:08
поделиться

1 ответ

Что вы можете сделать, так это привязать экземпляр Java к контексту Javascript, а затем из Javascript этот идентификатор будет ссылкой на «настоящий» объект Java. Затем вы можете использовать его для вызова методов из Javascript в Java.

Сторона Java:

    final Bindings bindings = engine.createBindings();
    bindings.put("javaObject", new YourJavaClass());
    engine.setBindings(bindings, ScriptContext.ENGINE_SCOPE);

Javascript:

    javaObject.methodName("something", "something");

Теперь в этом примере предполагается, что вы используете API-интерфейсы JDK 6 java.util.script для переключения между Java и Rhino. От "простого" Rhino он немного отличается, но основная идея та же.

В качестве альтернативы вы можете импортировать классы Java в среду Javascript, и Rhino предоставит вам ссылки домена Javascript на объекты Java, когда вы используете Javascript «новый» для ссылок на классы Java.

3
ответ дан 4 December 2019 в 15:11
поделиться
Другие вопросы по тегам:

Похожие вопросы: