2

我在 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 中写为 context[''] 。如果这是真的,我无法在 dartlang.org 或 stackoverflow.com 中找到有关如何将此表达式正确转换为 Dart 的示例。您可以在此处查看 WaveSurfer 的 JS 源代码。

4

1 回答 1

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]);

请参阅使用 Dart 中的 JavaScript

如果您发现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);
于 2014-02-04T20:37:11.837 回答