javascript - 有没有办法可以使用 PyV8 评估具有默认参数的 JavaScript 函数?
问题描述
我正在尝试从 python 中的 JavaScript 调用一个函数。我正在使用 PyV8,我可以成功调用一个函数并打印出结果。但是,如果函数包含默认参数,则会出现语法错误。
这工作正常。
import PyV8
ctxt = PyV8.JSContext()
ctxt.enter()
ctxt.eval("function example(a){return a;}")
render = ctxt.eval("example('hello');")
print render
但是,当我让示例包含这样的默认参数时:
import PyV8
ctxt = PyV8.JSContext()
ctxt.enter()
ctxt.eval("function example(a = 'hello'){return a;}")
render = ctxt.eval("example();")
print render
我得到 SyntaxError: SyntaxError: Unexpected token = ( @ 1 : 19 ) -> function example(a = 'hello'){return a;}
任何帮助表示赞赏。
解决方案
默认参数是 ES6 的一个特性。
PyV8 不支持 ES6 语法。您需要使用shim/polyfil:
import PyV8
jsFunc = """
function test(msg, name) {
(msg === undefined) && (msg = 'hello');
(name === undefined) && (name = 'world');
return msg + ' ' + name
}
"""
ctxt = PyV8.JSContext()
ctxt.enter()
ctxt.eval(jsFunc)
render1 = ctxt.eval("test();")
render2 = ctxt.eval("test('hi');")
print render1
print render2
印刷:
hello world
hi world
推荐阅读
- javascript - 单击按钮不执行 Firefox 中的功能
- reactjs - 使用 TypeScript 的 Eslint react/prop-types 错误
- vue.js - 无法访问 nuxt.config.js 中的 env
- sql-server - where 条件基于具有 Max 记录的多列
- node.js - dynamoDB 相对于 mongoDB 的技术优势:考虑迁移
- java - 在 Java 中使用添加函数/字段来枚举案例而不是覆盖?
- javascript - 获取确切的一个 ngFor 元素的值,我输入了该值
- python - HTTP Post 请求仅在重新加载网页时
- android - 如何在Android手机上制作接收器?
- java - 如何在 jasperreport 中添加子报表 dinamyc