2016-05-12 1 views
0

Предыдущий разработчик в нашей компании внедрил собственный движок JavaScript, который мы хотели бы заменить на Nashorn.Расширение мотора Nashorn ecma для добавления новых операторов и типов

Он реализовал подмножество стандарта ECMA, поэтому теоретически это должна быть довольно простая операция, за исключением того, что он немного расширил язык!

Лучшее объясняется примером синтаксиса, который может поддерживать его язык.

var today = now(); //create a proprietary object that represents time 
var tomorrow = today + 1d; //Add a day. NOTE 1h is NOT a constant 

Как можно видеть, что он имеет

  • добавил оператор перегрузки для своего класса времени.
  • Введен новый «тип» номера, представляющий продолжительность времени. Этот тип может быть создан с помощью шаблонов, таких как 1d, 3d4h5s, 1h, 5m и т. Д. Код знает, как добавлять/вычитать эти числа за время!

Эквивалент Javascript код будет

var today = now(); //create a proprietary object that represents time 
var tomorrow = today.plus(new Duration('1d')); //Add a day. 

Я хотел бы знать, если Nashorn имеет какие-либо «крючки», так что мы можем расширить язык с этими «особенностями», или мы должны переписать все наши скрипты?

Благодаря

Richard

+0

Фактически вы можете использовать Date() s (kinda), если у вас были только константы; 'H1 = 1000 * 60 * 60; alert (новая дата (+ новая дата() + H1)) ' – dandavis

+0

H1 не является константой. На самом деле это тип номера. – richard

ответ

0

Нет, Насхорн не имеет крючки для расширения языка реализованы. Я думаю, вам нужно выполнить предварительную обработку скрипта - произнесите парсер и замените такой «+» на «.plus» и т. Д. - прежде чем отправлять сценарий движку nashorn.