扩展Nashorn ecma引擎以添加新的运算符和类型

时间:2016-05-12 23:57:21

标签: javascript nashorn

我们公司的前任开发人员已经实现了他们自己的javascript引擎,我们希望用Nashorn替换它。

他已经实施了ECMA标准的一个子集,所以理论上它应该是一个相当直接的操作,除非他稍微扩展了语言!

最好通过他的语言可以支持的语法示例来解释。

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

可以看出他有

  • 将运算符重载添加到他自己的Time类中。
  • 引入了一个表示持续时间的新“数字”类型此类型可以使用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是否有任何“钩子”,以便我们可以使用这些“功能”扩展语言,还是我们需要重写所有脚本?

由于

理查德

1 个答案:

答案 0 :(得分:0)

不,nashorn没有任何钩子来扩展实现的语言。我想你需要对脚本进行预处理 - 比如解析器并替换这样的" +"用" .plus"在将脚本提交给nashorn引擎之前调用等等。