在darjs中,for的替代方案是什么?

时间:2019-06-24 09:15:54

标签: dart dart-js-interop

我正在寻找dart:js中的JavaScript for in的替代方案?

例如:

if('addEventListener' in event) {
event.addEventListener(change);
}

我使用了is运算符,但由于事件中不存在addEventListener,它在Safari中引发了错误。

if(event.addEventListener is Function) {
event.addEventListener(change);
}

1 个答案:

答案 0 :(得分:3)

在Dart中不需要检查对象是否支持特定方法。您应该检查对象是否实现了具有该方法的接口。

在此示例中,您可能需要:

if (event is EventTarget) {
  event.addEventListener("change", change);
}

如果您认为该对象可能支持该功能,但是您实际上并不知道从哪个接口获取该功能,则可以使用动态查找执行此处尝试的操作,但是您需要捕获错误如果该功能不存在,则会得到提示。

dynamic e = event;  // if it isn't dynamic already.
Object addEventListener;
try {
  addEventListener = e.addEventListener;
} on Error {
  // ignore.
}
if (addEventListener is Function) {
  addEventListener(...);
}