我想从Javascript调用Dart函数。
我想使用dart2js
(版本1.1.3)编译包含Dart函数的Dart脚本,然后将生成的.js
文件加载到Javascript环境中,并从Javascript调用该函数。 / p>
从Javascript下面调用myHyperSuperMegaFunction
下面的内容。
import 'dart:js' as js;
int myHyperSuperMegaFunction(int a, int b) {
return a + b;
}
main() {
js.context['myHyperSuperMegaFunction'] = new js.JsFunction.withThis(myHyperSuperMegaFunction);
}
我尝试使用dart2js
编译上述内容并将生成的.js
文件加载到Chrome中。变量myHyperSuperMegaFunction
已注册并定义为
function () {
return _call(f, captureThis, this, Array.prototype.slice.apply(arguments));
}
但是,当我从Chrome Javascript控制台拨打myHyperSuperMegaFunction(2,3)
时,我收到以下错误NoSuchMethodError : method not found: 'Symbol("call")' Receiver: Instance of '(){this.$initialize' Arguments: [Instance of 'Window', 2, 3]
答案 0 :(得分:5)
您无需使用new js.JsFunction.withThis
。在你的情况下,只需使用:
js.context['myHyperSuperMegaFunction'] = myHyperSuperMegaFunction;
如果您需要使用new js.JsFunction.withThis
Js上下文,则必须使用this
。在您的错误中,您可以看到第一个参数是Instance of 'Window'
,它是Js中的全局上下文。