当JsObject.callMethod工作时,JsFunction.apply不起作用(dart)

时间:2015-06-21 20:59:37

标签: javascript dart dart-js-interop

我经常这样,JsFunction.apply不能像我期望的那样工作。考虑这个例子:

import "dart:js";
import "dart:html";

void main() {
  var div = querySelector('div');
  var span = new SpanElement()..text = "hello world";
  var js = new JsObject.fromBrowserObject(div);
  js["appendChild"].apply([span]);

  // this one does work:
  // js.callMethod("appendChild", [span]);
}

我希望js["appendChild"].apply([span]);js.callMethod("appendChild", [span]);完全相同。

另见此演示:https://dartpad.dartlang.org/0f35d76a3c61ba1371f1

1 个答案:

答案 0 :(得分:4)

适用于js["appendChild"].apply([span], thisArg: js);

如果您未提供thisArg,则可以使用null作为第一个参数调用Function.prototype.apply

因此你的Dart调用与js:

相同
var div = document.querySelector('div');
var span = document.createElement("span");
span.innerText = "hello world";
div["appendChild"].apply(null, [span]);

执行上述js代码会导致TypeError: Illegal invocation。要使其工作,您必须使用div["appendChild"].apply(div, [span]);

所以这不是Dart问题,而是js问题。