我在Dart中构建了两个JS对象。在JS中,它们是用Object.create():
构造的var wavesurfer1 = Object.create(WaveSurfer);
var wavesurfer2 = Object.create(WaveSurfer);
这就是我认为Dart的等价物:
var wavesurfer1 = context['WaveSurfer'];
var wavesurfer1 = context['WaveSurfer'];
但是,我发现Dart中的两个对象看起来是一样的。当我在一个对象中调用一个函数时,它会被触发。这不会发生在JS代码中。我怀疑Object.create()不应该在Dart中写成上下文['']。如果这是真的,我无法在dartlang.org或stackoverflow.com中找到如何正确将此表达式转换为Dart的示例。您可以看到WaveSurfer here的JS源代码。
答案 0 :(得分:4)
使用context['WaveSurfer']
,您将获得与Js WaveSurfer 对应的 JsObject ,而不是新对象。
执行粘贴的JS代码的Dart等效项:
import 'dart:js';
var wavesurfer = context['WaveSurfer'];
var wavesurfer1 = context['Object'].callMethod('create', [waveSurfer]);
var wavesurfer2 = context['Object'].callMethod('create', [waveSurfer]);
请参阅Using JavaScript from Dart。
如果您发现 dart:js 的用法很难和详细,您可以使用 package:js 来提供更简单的API(但是JS生成的大小更大) :
import 'package:js/js.dart';
var wavesurfer1 = context.Object.create(context.WaveSurfer);
var wavesurfer2 = context.Object.create(context.WaveSurfer);