【问题标题】:what is alternative of for in in darjs?darjs 中的 for in 的替代方法是什么?
【发布时间】:2019-11-06 01:44:52
【问题描述】:

我正在寻找 dart:js 中 javascript for in 的替代品?

例如:

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

我使用了is 运算符,但它在 Safari 中抛出错误,因为事件中不存在 addEventListener。

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

【问题讨论】:

  • 你在第一句话中说for in,但在示例中没有使用for。是不是打错字了?

标签: dart dart-js-interop


【解决方案1】:

检查一个对象是否支持特定的方法并不是你在 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(...);
}

【讨论】:

  • 有没有其他方法可以检查属性是否存在?
  • 仅使用dart:mirrors 进行反射。这在网络上不受支持,因此不能与 JS 互操作一起使用。如果有问题的对象是 JavaScript 对象,而不是 Dart 对象,那么您可以直接使用 JS 互操作,但您不应该对 Dart 对象这样做。
猜你喜欢
  • 2017-05-17
  • 1970-01-01
  • 1970-01-01
  • 2020-04-19
  • 1970-01-01
  • 1970-01-01
  • 2022-11-13
  • 2015-02-06
  • 2015-01-04
相关资源
最近更新 更多