可以从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']
可获得与ojit_code相同的结果。数组表示法的主要优点是它避免了js.context.gapi.client
。直到最近,这是解决issue in dart2js where minified does not work with noSuchMethod的唯一方法。此问题已修复,最小化应与Dart-JS互操作一起使用。
我前段时间做了一些基准测试:
noSuchMethod
快约10%。 (noSuchMethod
与js.context.x
)js.context['x']
慢约50%。 (noSuchMethod
与js.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/