首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ExecJS - Javascript对象实例?

ExecJS - Javascript对象实例?
EN

Stack Overflow用户
提问于 2012-12-20 15:55:42
回答 1查看 895关注 0票数 4

如果我有一个javascript对象,我通常会像这样与对象及其方法交互:

代码语言:javascript
复制
var obj = someObject.getInstance();
var result = obj.someMethod();

其中someMethod的定义如下:

代码语言:javascript
复制
someObject.prototype.someOtherMethod = function() { //do stuff };
someObject.prototype.someMethod = function(foo) { this.someOtherMethod(); };

然而,当我想通过ExecJS调用Ruby语言中的someMethod时,我得到了一个错误:

代码语言:javascript
复制
context = ExecJS.compile(# the javascript file)
context.call('someObject.getInstance().someMethod') 
# Gives a TypeError where Object has no method 'someOtherMethod'

另一方面,javascript模块中定义的函数运行良好:

代码语言:javascript
复制
someFunction = function() { // do stuff };

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

ExecJS可以处理Javascript对象和它们的方法吗,或者我只能用它调用函数?

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-12-24 09:37:59

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

代码语言:javascript
复制
js = <<JS
var jsObj = someObject.getInstance();
var res = jsObj.someMethod();
return res;
JS

context.exec(js);

但是,如果您的方法返回一个Javascript对象,您必须首先序列化它,或者解析结果,以便ExecJS可以将其返回到合适的Ruby对象中。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13967576

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档