2

我有一个使用 CreateJS js 库制作的 HTML5 游戏。我想用 Dart 重写它,但我的大部分对象都继承自 CreateJS 对象(例如 Container)。我能保存这样的遗产吗?有没有一种很好的方法可以将 Dart 与其他旨在简化画布绘图的 js 库一起使用?

4

1 回答 1

3

Dart 类不能直接扩展 Javascript 类。但是,您可以通过设置将执行 Dart 代码的方法来自定义您的 Javascript 对象。

例如,假设您有一个Child扩展 class 的 JavascriptContainer类:

function Container(){}
Container.prototype.callSayHello = function(){ this.sayHello(); }
Container.prototype.sayHello = function(){ alert("hello from JS"); }

function Child(){}
Child.prototype = new Container();

在 Dart 方面,您可以创建一个Child并在其上定义一个sayHello方法,覆盖sayHelloContainer

import 'dart:html';
import 'package:js/js.dart' as js;

main(){
  // with sayHello overriding
  js.scoped((){
    final child = new js.Proxy(js.context.Child);
    child.sayHello = new js.Callback.many(() {
      window.alert("hello from Dart");
    });
    child.callSayHello(); // displays "hello from Dart"
  });

  // without sayHello overriding
  js.scoped((){
    final child = new js.Proxy(js.context.Child);
    child.callSayHello(); // displays "hello from JS"
  });
}
于 2012-12-22T22:11:36.323 回答