2015-03-06 3 views
0

Вот кусок очень простой кусок кода Java, который оценивает некоторые JavaScript код:способность Nashorn передать неопределенные переменные в функции

public static class Logger 
{ 
    public log(String line) 
    { 
     System.out.println(line); 
    } 
} 
public static void main(String[] args) 
{ 
     NashornScriptEngineFactory factory = new NashornScriptEngineFactory(); 
     ScriptEngine engine = factory.getScriptEngine(new String[] 
     { 
       "-strict", 
       "--no-java", 
       "--no-syntax-extensions" 
     }); 
     engine.put("log", new Logger()); 
     engine.eval(
      "var ifExists = function(checkExists, otherwise)" + 
       "{" + 
        "if(typeof checkExists !== 'undefined')" + 
        "{" + 
         "return checkExists;" + 
        "}" + 
        "else" + 
        "{" + 
         "return otherwise;" + 
        "}" + 
       "};" + 
      "log.log(ifExists(someVariableThatIsUndefined, 'this string should be returned'));" 
     ); 
} 

Когда он пытается запустить ifExists (someVariableThatIsUndefined, «эта строка должна быть возвращенным '), двигатель бросает посадку, говоря, что someVariableThatIsUndefined is..well undefined, который побеждает цель метода утилиты для проверки того, что что-то не определено.

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

Единственное ограничение регулируется Params проанализированного к двигателю "-strict, --no-Java, --no-синтаксис-расширение"

ответ

1

вы можете протестировать функцию существующей или нет с

window['myFunctionName'] !== 'undefined' 

или в случае имущества

this['myPropertyName'] !== 'undefined' 

 Смежные вопросы

  • Нет связанных вопросов^_^