OLD | NEW |
1 // Copyright (c) 2015, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2015, the Dart project authors. Please see the AUTHORS file |
2 // for details. All rights reserved. Use of this source code is governed by a | 2 // for details. All rights reserved. Use of this source code is governed by a |
3 // BSD-style license that can be found in the LICENSE file. | 3 // BSD-style license that can be found in the LICENSE file. |
4 | 4 |
5 /** | 5 /** |
6 * Support for interoperating with JavaScript. | 6 * Support for interoperating with JavaScript. |
7 * | 7 * |
8 * This library provides access to JavaScript objects from Dart, allowing | 8 * This library provides access to JavaScript objects from Dart, allowing |
9 * Dart code to get and set properties, and call methods of JavaScript objects | 9 * Dart code to get and set properties, and call methods of JavaScript objects |
10 * and invoke JavaScript functions. The library takes care of converting | 10 * and invoke JavaScript functions. The library takes care of converting |
(...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
69 * * `TypedData`, including its subclasses like `Int32List`, but _not_ | 69 * * `TypedData`, including its subclasses like `Int32List`, but _not_ |
70 * `ByteBuffer` | 70 * `ByteBuffer` |
71 * * `Window` | 71 * * `Window` |
72 * | 72 * |
73 * ## Converting collections with JsObject.jsify() | 73 * ## Converting collections with JsObject.jsify() |
74 * | 74 * |
75 * To create a JavaScript collection from a Dart collection use the | 75 * To create a JavaScript collection from a Dart collection use the |
76 * [JsObject.jsify] constructor, which converts Dart [Map]s and [Iterable]s | 76 * [JsObject.jsify] constructor, which converts Dart [Map]s and [Iterable]s |
77 * into JavaScript Objects and Arrays. | 77 * into JavaScript Objects and Arrays. |
78 * | 78 * |
79 * The following expression creats a new JavaScript object with the properties | 79 * The following expression creates a new JavaScript object with the properties |
80 * `a` and `b` defined: | 80 * `a` and `b` defined: |
81 * | 81 * |
82 * var jsMap = new JsObject.jsify({'a': 1, 'b': 2}); | 82 * var jsMap = new JsObject.jsify({'a': 1, 'b': 2}); |
83 * | 83 * |
84 * This expression creates a JavaScript array: | 84 * This expression creates a JavaScript array: |
85 * | 85 * |
86 * var jsArray = new JsObject.jsify([1, 2, 3]); | 86 * var jsArray = new JsObject.jsify([1, 2, 3]); |
87 */ | 87 */ |
88 library dart.js; | 88 library dart.js; |
89 | 89 |
(...skipping 471 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
561 /// future if Dart2Js is refactored so that its function calling conventions | 561 /// future if Dart2Js is refactored so that its function calling conventions |
562 /// are more compatible with JavaScript. | 562 /// are more compatible with JavaScript. |
563 Function/*=F*/ allowInterop/*<F extends Function>*/(Function/*=F*/ f) => f; | 563 Function/*=F*/ allowInterop/*<F extends Function>*/(Function/*=F*/ f) => f; |
564 | 564 |
565 Expando<Function> _interopCaptureThisExpando = new Expando<Function>(); | 565 Expando<Function> _interopCaptureThisExpando = new Expando<Function>(); |
566 | 566 |
567 /// Returns a [Function] that when called from JavaScript captures its 'this' | 567 /// Returns a [Function] that when called from JavaScript captures its 'this' |
568 /// binding and calls [f] with the value of this passed as the first argument. | 568 /// binding and calls [f] with the value of this passed as the first argument. |
569 /// When called from Dart, [null] will be passed as the first argument. | 569 /// When called from Dart, [null] will be passed as the first argument. |
570 /// | 570 /// |
571 /// See the documention for [allowInterop]. This method should only be used with | 571 /// See the documentation for [allowInterop]. This method should only be used |
572 /// package:js Dart-JavaScript interop. | 572 /// with package:js Dart-JavaScript interop. |
573 Function allowInteropCaptureThis(Function f) { | 573 Function allowInteropCaptureThis(Function f) { |
574 var ret = _interopCaptureThisExpando[f]; | 574 var ret = _interopCaptureThisExpando[f]; |
575 if (ret == null) { | 575 if (ret == null) { |
576 ret = JS( | 576 ret = JS( |
577 '', | 577 '', |
578 'function(/*...arguments*/) {' | 578 'function(/*...arguments*/) {' |
579 ' let args = [this];' | 579 ' let args = [this];' |
580 ' for (let arg of arguments) {' | 580 ' for (let arg of arguments) {' |
581 ' args.push(arg);' | 581 ' args.push(arg);' |
582 ' }' | 582 ' }' |
583 ' return #(...args);' | 583 ' return #(...args);' |
584 '}', | 584 '}', |
585 f); | 585 f); |
586 _interopCaptureThisExpando[f] = ret; | 586 _interopCaptureThisExpando[f] = ret; |
587 } | 587 } |
588 return ret; | 588 return ret; |
589 } | 589 } |
OLD | NEW |