2013-05-23 4 views
3

Можно ли проверить, содержит ли объект javascript свойство?js-interop testing, если объект javascript имеет свойство

Я в настоящее время обертываю try/catch для каждого свойства, к которому я хотел бы получить доступ. Я не думаю, что это эффективный способ проверить, существуют ли свойства на объекте.

ответ

2

Использование try - catch - более эффективный способ проверить это, потому что есть только один обмен между Dart и Js.


Другим способом может быть для обработки вашего объектов JavaScript, как Дарт Map с:

import 'package:js/js.dart' as js; 
import 'package:js/js_wrapping.dart' as jsw; 

main() { 
    final myProxy = ...; 
    Map<String, dynamic> myProxyAsMap = jsw.JsObjectToMapAdapter.cast(proxy); 
    Iterable<String> keys = myProxyAsMap.keys; 
} 

Но он менее эффективен, чтобы проверить, если keys.contains("key") чем использовать try - catch путь. Более того, если вы интенсивно используете этот keys, рассмотрите возможность копирования списка с помощью keys = myProxyAsMap.keys.toList(). Фактически myProxyAsMap.keys все еще испечен базовым массивом js. .toList() создаст настоящий Дарт-лист и предотвратит обмен Dart-js.