使用 `static` 访问 JS 对象
JavaScript 模块通常会导出任意静态对象以供其提供的接口使用。可以通过在 `extern` 块中声明一个命名的 `static` 来从 Rust 访问这些对象。`wasm-bindgen` 将为这些对象绑定一个 `JsStatic`,该对象可以克隆到 `JsValue` 中。例如,给定以下 JavaScript
let COLORS = {
red: 'rgb(255, 0, 0)',
green: 'rgb(0, 255, 0)',
blue: 'rgb(0, 0, 255)',
};
可以使用 `static` 从 Rust 访问此对象
# #![allow(unused_variables)] #fn main() { #[wasm_bindgen] extern "C" { static COLORS; } fn get_colors() -> JsValue { COLORS.clone() } #}
由于 `COLORS` 实际上是一个 JavaScript 命名空间,因此可以使用相同的机制直接引用从 JavaScript 模块导出的命名空间,甚至引用导出的类
let namespace = {
// Members of namespace...
};
class SomeType {
// Definition of SomeType...
};
export { SomeType, namespace };
此模块的绑定
# #![allow(unused_variables)] #fn main() { #[wasm_bindgen(module = "/js/some-rollup.js")] extern "C" { // Likewise with the namespace--this refers to the object directly. #[wasm_bindgen(js_name = namespace)] static NAMESPACE: JsValue; // Refer to SomeType's class #[wasm_bindgen(js_name = SomeType)] static SOME_TYPE: JsValue; // Other bindings for SomeType type SomeType; #[wasm_bindgen(constructor)] fn new() -> SomeType; } #}