将Dart函数传递给Javascript代码时,当前的约定是使用allowInterop()
中的package:js
(大概)。效果很好,但它创建了一个闭包,而期望构造函数的Javascript代码不允许这样做。
我已经做了一些挖掘工作,但是却陷入了僵局here:
external DART_CLOSURE_TO_JS(Function function);
这去哪儿了?它是开源的吗?
能否将Dart函数在package:js或dart:js中转换为非封闭式JS函数?如果没有,为什么?
答案 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对话(反之亦然)。