【问题标题】:How does Dart2JS convert a Dart function to a JS function?Dart2JS 如何将 Dart 函数转换为 JS 函数?
【发布时间】:2018-10-28 05:36:12
【问题描述】:

将 Dart 函数传递给 Javascript 代码时,当前的约定是使用 allowInterop()package:js (大概)。这工作得很好,但它创建了一个闭包,这是需要构造函数的 Javascript 代码所不允许的。

我已经做了一些挖掘,但走到了死胡同here

external DART_CLOSURE_TO_JS(Function function);

这要去哪里?它是开源的吗?

是否可以将 Dart 函数转换为 package:js 或 dart:js 中的非封闭 JS 函数?如果不是,为什么?

【问题讨论】:

  • 嗨,你有你已经尝试过的例子吗?
  • 定义自定义元素需要传递一个构造函数,如果该函数是闭包则会抛出错误。它与this issue 相关。有一些方法可以使其与 DDC 或 Dart2JS 一起使用,但我不知道有任何方法可以同时适用于这两种方法。

标签: dart dart-js-interop


【解决方案1】:

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

通常的方法是使用 ES6 类。我做了一个使用JS定义自定义元素类的例子。我想你可能已经看到了,但在这里链接它以防万一:Dart custom element interop demo。文件web/interop.js 定义了自定义元素类。

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-10-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-14
    相关资源
    最近更新 更多