gpt4 book ai didi

javascript - ExecJS - Ruby 中的 Javascript 对象实例?

转载 作者:数据小太阳 更新时间:2023-10-29 07:34:24 24 4
gpt4 key购买 nike

如果我有一个 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 对象中。

关于javascript - ExecJS - Ruby 中的 Javascript 对象实例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13967576/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com