javax.script - rhino - как могат да се преглеждат или редактират естествени функции?

Искам да внедря функция, която е подобна на JSON.stringify.

Когато се обадя:

    ScriptEngine engine = new ScriptEngineManager().getEngineByName("JavaScript");
    Object eval = engine.eval("JSON.stringify");
    System.out.println(eval);

Получавам sun.org.mozilla.javascript.internal.IdFunctionObject. Но как мога наистина да видя как се изпълнява? Мога ли да редактирам или добавям такива "родни" функции?

Не предлагайте внедряване на sun.org.mozilla.javascript.internal.Function – познавам тази способност, но искам да придобия малко знания за това как работят естествените функции.


person Boris    schedule 06.12.2013    source източник


Отговори (1)


Не можете да оцените JSON.stringify, защото не е внедрен в Rhino. (Това е предимно базирано на браузър нещо, въпреки че предполагам, че Nashorn и node го имат).

Можете да оцените съдържанието на json2.js, което имплементира JSON.stringify и тогава вашият код трябва да работи.

Но ако просто искате да stringify, тогава бих използвал org.mozilla.javascript.NativeJSON.stringify.

person Nicholas    schedule 06.12.2013
comment
Опитайте този код и ще видите, че е внедрен: new ScriptEngineManager().getEngineByName(JavaScript).eval(JSON.stringify({x:1})); - person Boris; 09.12.2013
comment
Не знам. При мен не работи, но може да се дължи на по-ранна версия. Моят ScriptEngineFactory отчита версия 1.6 версия 2, но изпълнението на вашия код хвърля изключение: javax.script.ScriptException: sun.org.mozilla.javascript.internal.EcmaError: ReferenceError: JSON не е дефиниран . - person Nicholas; 13.12.2013