使用 `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;
}
#}