2

索引.html

<!doctype html>
<html>
  <head>
  </head>
    <script>
      var Apple = function(type) {
        this.type = type;
        this.color = "red";
      };

      Apple.prototype.getInfo = function() {
        return this.color + ' ' + this.type + ' apple';
      };
    </script>
  <body>
    <script type="application/dart" src="index.dart"></script>
    <script src="packages/browser/dart.js"></script>
  </body>
</html>

索引.dart

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

main() {
  // this works fine
  var apple = new js.JsObject(js.context['Apple'], ['Macintosh']);
  print(apple.callMethod('getInfo', []));
  print(new Apple().getInfo());
}

@Js() // about to being changed to @JS
class Apple {
  external String get type;
  external set type(String type);
  external String get color;
  external set color(String color);
  external factory Apple(String type);
}

只需添加@Js()注释即可

例外:'dart:js':断言失败:第 393 行:'p.isNamed' 不正确。天文台在http://127.0.0.1:35293/监听 内部错误:Dart_Invoke 期望加载库参数“目标”。

更新 删除external factory Apple(String type);修复了异常。

现在我明白了

天文台收听http://127.0.0.1:38029/
red Macintosh apple
异常:“Apple”类没有实例方法“getInfo”。

NoSuchMethodError:找不到方法:“getInfo”
接收者:“Apple”实例
参数:[...]
Apple.getInfo
main

4

1 回答 1

3

该类需要一个构造函数声明,但没有factory

有了这个 JS

<script>
  var Apple = function(type) {
    this.type = type;
    this.color = "red";
    this.getInfo2 = function() {
      return this.color + ' ' + this.type + ' apple';
    };
  };

  Apple.prototype.getInfo = function() {
    return this.color + ' ' + this.type + ' apple';
  };
</script>

这个飞镖代码

main() {
  var apple = new js.JsObject(js.context['Apple'], ['Macintosh']);
  print(apple.callMethod('getInfo', []));
  print(new Apple('Macintosh').type);
  print(new Apple('Macintosh').getInfo2());
  print(new Apple('Macintosh').getInfo());
}

@Js() // about to being changed to @JS
class Apple {
  external String get type;
  external set type(String type);
  external String get color;
  external set color(String color);
  external String getInfo();
  external String getInfo2();
  external Apple(String type);
}

它按预期工作。

于 2015-10-16T12:10:12.547 回答