Dart2JS如何将Dart函数转换为JS函数?

时间:2018-10-28 05:36:13

标签: dart dart-js-interop

将Dart函数传递给Javascript代码时,当前的约定是使用allowInterop()中的package:js(大概)。效果很好,但它创建了一个闭包,而期望构造函数的Javascript代码不允许这样做。

我已经做了一些挖掘工作,但是却陷入了僵局here

external DART_CLOSURE_TO_JS(Function function);

这去哪儿了?它是开源的吗?

能否将Dart函数在package:js或dart:js中转换为非封闭式JS函数?如果没有,为什么?

1 个答案:

答案 0 :(得分:3)

Dart函数不能用作JS构造函数,因为它没有适当的原型设置。对于自定义元素,还有另一个困难:它必须正确地委派给DOM元素构造函数。

通常的方法是使用ES6类。我举了一个使用JS定义自定义元素类的示例。我想您可能已经看过,但是为了防万一,请在此处链接它:Dart custom element interop demo。文件web/interop.js定义了自定义元素类。

如果使用Reflect.construct(),我认为ES5构造函数也可以工作。上周我花了一些时间看这是否有助于改造dart:html以使用自定义元素,但我认为这还不够。 Dart将需要一些更好的JS互操作功能。

同时,我的建议是在JS中定义自定义元素类,并使用interop与Dart对话(反之亦然)。