Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/dart/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Dart 在比js.context.X更深的函数上使用数组表示法而不是NSM_Dart_Dart Js Interop - Fatal编程技术网

Dart 在比js.context.X更深的函数上使用数组表示法而不是NSM

Dart 在比js.context.X更深的函数上使用数组表示法而不是NSM,dart,dart-js-interop,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.co

能否使用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);
这对我很有用:

var hug=newjs.Proxy(上下文['hug']);
var hugDatabase=newjs.Proxy(上下文['hugDatabase']);
hugDatabase['addHug'](hug);
打印(hugDatabase['hugs']['length']);
它与此JavaScript交互:

功能(强度){
力量=力量;
}
拥抱。原型。拥抱=功能(长度){
return“谢谢,这是一个很好的拥抱,”+length+“分钟!”;
}
Hug.prototype.patBack=函数(onDone){
onDone(“全部完成”);
}
函数数据库(){
this.hugs=[];
}
HugDatabase.prototype.addHug=函数(hug){
这个。拥抱。推(拥抱);
}
完整的示例如下:

这对我来说很有用:

var hug=newjs.Proxy(上下文['hug']);
var hugDatabase=newjs.Proxy(上下文['hugDatabase']);
hugDatabase['addHug'](hug);
打印(hugDatabase['hugs']['length']);
它与此JavaScript交互:

功能(强度){
力量=力量;
}
拥抱。原型。拥抱=功能(长度){
return“谢谢,这是一个很好的拥抱,”+length+“分钟!”;
}
Hug.prototype.patBack=函数(onDone){
onDone(“全部完成”);
}
函数数据库(){
this.hugs=[];
}
HugDatabase.prototype.addHug=函数(hug){
这个。拥抱。推(拥抱);
}

完整的例子如下:

TL;DR:首先对属性使用数组表示法,对方法使用
noSuchMethod


使用
js.context['gapi']['client']
会得到与
js.context.gapi.client
相同的结果。数组表示法的主要优点是它避免了
noSuchMethod
。直到最近,这还是解决问题的唯一方法。此问题已修复,缩小应与Dart JS互操作配合使用

几天前我做了一个小基准测试:

  • 对于属性访问:数组表示法比
    noSuchMethod
    快10%左右。(
    js.context.x
    vs.
    js.context['x']
  • 对于方法访问:数组表示法比noSuchMethod大约慢50%。(
    js.context.f()
    vs.
    js.context['f']()
最后一个结果是由JS和Dart之间的2次通信解释的。一个用于检索函数引用(
js.context['f']
),另一个用于调用此函数


最后,使用
noSuchMethod
可以增加您的dart2js结果大小(但在我测试的地方没有这么大)。

TL;DR:首先对属性使用数组表示法,对方法使用
noSuchMethod


使用
js.context['gapi']['client']
会得到与
js.context.gapi.client
相同的结果。数组表示法的主要优点是它避免了
noSuchMethod
。直到最近,这还是解决问题的唯一方法。此问题已修复,缩小应与Dart JS互操作配合使用

几天前我做了一个小基准测试:

  • 对于属性访问:数组表示法比
    noSuchMethod
    快10%左右。(
    js.context.x
    vs.
    js.context['x']
  • 对于方法访问:数组表示法比noSuchMethod大约慢50%。(
    js.context.f()
    vs.
    js.context['f']()
最后一个结果是由JS和Dart之间的2次通信解释的。一个用于检索函数引用(
js.context['f']
),另一个用于调用此函数

最后一个问题是,使用
noSuchMethod
可以增加您的dart2js结果大小(但在我测试的地方没有这么大)