加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ExecJS – Ruby中的Javascript对象实例?

发布时间:2020-12-17 02:19:55 所属栏目:百科 来源:网络整理
导读:如果我有一个 javascript对象,我通常会与对象及其方法进行交互,如下所示: var obj = someObject.getInstance();var result = obj.someMethod(); 其中someMethod定义如下: someObject.prototype.someOtherMethod = function() { //do stuff };someObject.pr
如果我有一个 javascript对象,我通常会与对象及其方法进行交互,如下所示:

var obj = someObject.getInstance();
var result = obj.someMethod();

其中someMethod定义如下:

someObject.prototype.someOtherMethod = function() { //do stuff };
someObject.prototype.someMethod = function(foo) { this.someOtherMethod(); };

但是,当我想通过ExecJS在Ruby中调用someMethod时出现错误:

context = ExecJS.compile(# the javascript file)
context.call('someObject.getInstance().someMethod') 
# Gives a TypeError where Object has no method 'someOtherMethod'

另一方面,javascript模块中定义的函数正常工作:

someFunction = function() { // do stuff };

# in Ruby
context.call('someFunction') # does stuff

ExecJS可以处理Javascript对象及其方法,还是只能用它来调用函数?

关于具体的应用程序,我正在研究https://github.com/joenoon/libphonenumber-execjs,但Libphonenumber中的解析函数由于上述原因不起作用.

解决方法

通过一些实验发现了答案.我设法通过使用context.exec()而不是调用来获得所需的功能.

js = <<JS
var jsObj = someObject.getInstance();
var res = jsObj.someMethod();
return res;
JS

context.exec(js);

但是,如果您的方法返回Javascript对象,则必须先将其序列化,否则解析结果,以便ExecJS将其返回到合适的Ruby对象中.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读