我经常这样,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]);
完全相同。
答案 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问题。