dart - 在比js.context.X更深的功能上使用数组表示法而不是NSM

标签 dart dart-js-interop

可以从Dart使用数组符号访问js.context之后的所有对象吗?例如,我想将以下内容转换为使用数组符号:

var request = js.context.gapi.client.request(js.map(requestData));

下列数组符号会起作用吗?

var request = js.context['gapi']['client']['request'](js.map(requestData));

另外,如果尝试访问JavaScript内置方法,是否应该执行以下操作?

js.context['JSON']['stringify'](jsonResp);

最佳答案

TL; DR :从r24278开始,对属性使用数组表示法,对方法使用noSuchMethod

使用js.context['gapi']['client']可获得与oj​​it_code相同的结果。数组表示法的主要优点是它避免了js.context.gapi.client。直到最近,这是解决issue in dart2js where minified does not work with noSuchMethod的唯一方法。此问题已修复,最小化应与Dart-JS互操作一起使用。

我前段时间做了一些基准测试:

  • 对于属性访问:数组表示法比noSuchMethod快约10%。 (noSuchMethodjs.context.x)
  • 对于方法访问:数组表示法比js.context['x']慢约50%。 (noSuchMethodjs.context.f())

  • 最后的结果由JS和Dart之间针对js.context['f']()的2条通信解释。一种检索函数引用(js.context['f']()),另一种调用此函数。

    最后一个问题,使用js.context['f']可以增加dart2js结果的大小(但在我测试的地方没有太大的影响)。

    关于dart - 在比js.context.X更深的功能上使用数组表示法而不是NSM,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17312088/

    相关文章:

    charts - 在Dart中使用amCharts,无法通过回调显示图表

    flutter - 如何将具有时间戳字段的 firestore doc 数据转换为通过 Freezed dart 包生成的数据类?

    flutter - Google地方信息自动填充未显示结果

    flutter - 通过蓝牙与 flutter_reactive_ble 连接时遇到问题

    javascript - 使用不带html文件的dart:js库

    javascript - JavaScript 中的 Dart 事件

    google-chrome-extension - 在 dart 中构建 chrome 扩展时出现 chrome.runtime.onConnect 问题

    dart - 有没有办法在Dart中捕获JavaScript异常?

    java - Flutter 中可以使用 Java 或 Kotlin 代码吗?

    flutter - flutter 构建ios需要新的Xcode