在ES6类中使用Dart JS互操作

在ES6类中使用Dart JS互操作,dart,dart-js-interop,dart-dev-compiler,Dart,Dart Js Interop,Dart Dev Compiler,JavaSscript: class MyClass { constructor() { console.log("MyClass instance created"); this.answer = 42; } } let example = new MyClass(); console.log(example.answer); 省道: 创建互操作类的实例MyClassas MyClass myClass = MyClass(); 结果:

JavaSscript:

class MyClass {

    constructor() {
        console.log("MyClass instance created");
        this.answer = 42;
    }
}

let example = new MyClass();
console.log(example.answer);
省道:

创建互操作类的实例
MyClass
as

MyClass myClass = MyClass();
结果:

异常:TypeError:dart.global.MyClass不是构造函数

我还尝试添加一个
外部MyClass()
外部工厂MyClass()
@JS()
注释类,但得到了相同的消息。如果我将
@anonymous
注释添加到interop类中,异常将消失,但我无法访问实例成员。(但我不明白为什么需要匿名注释)


我通过
webdev
使用
dart2.0.0
angular 5.0.0
js0.6.1+1
dartdevc
,通常js interop会依赖函数提升来确保旧式js类在范围内。然而,ES6课程并没有被提升,也不能在Dart期望的地方使用。有几种不同的方法可以让Dart使用该类:

将类对象放置在窗口上 这将类放置在函数定义将被提升到的相同范围内。在JavaScript中:

class MyClass { ... }

window.MyClass = MyClass;
class MyClass { ... }
var myModule = { MyClass: MyClass };
创建模块对象 您还可以将该类放置在一种伪模块或命名空间中。在JavaScript中:

class MyClass { ... }

window.MyClass = MyClass;
class MyClass { ... }
var myModule = { MyClass: MyClass };
然后可在Dart中的
myModule.myClass
访问:

@JS('myModule.myClass')
class MyClass { ... }

两个建议都很有效!令人惊叹的。谢谢。如果我理解正确,这意味着手动编辑js库。如果要在脚本标记中导入,则需要本地副本。有没有其他不需要这样做的方法?