Dart中的JS Object.create()

时间:2014-02-04 18:42:44

标签: dart dart-js-interop

我在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源代码。

1 个答案:

答案 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);