js_namespace = blah
此属性表示 JavaScript 类型通过给定的命名空间访问。例如,WebAssembly.Module
API 都通过 WebAssembly
命名空间访问。js_namespace
可以应用于任何导入(函数或类型),并且每当生成的 JavaScript 尝试引用名称(如类名或函数名)时,它将通过此命名空间访问。
# #![allow(unused_variables)] #fn main() { #[wasm_bindgen] extern "C" { #[wasm_bindgen(js_namespace = console)] fn log(s: &str); type Foo; #[wasm_bindgen(constructor, js_namespace = Bar)] fn new() -> Foo; } log("hello, console!"); Foo::new(); #}
这是一个关于如何在 Rust 中绑定命名空间项目的示例。log
和 Foo::new
函数将在 Rust 模块中可用,并将分别作为 console.log
和 new Bar.Foo
在 JavaScript 中调用。
也可以通过嵌套命名空间访问 JavaScript 对象。js_namespace
也接受字符串数组来指定命名空间。
# #![allow(unused_variables)] #fn main() { #[wasm_bindgen] extern "C" { #[wasm_bindgen(js_namespace = ["window", "document"])] fn write(s: &str); } write("hello, document!"); #}
此示例展示了如何在 Rust 中绑定 window.document.write
。
如果 extern "C" { … }
块中的所有项目都具有相同的 js_namespace = …
# #![allow(unused_variables)] #fn main() { #[wasm_bindgen] extern "C" { #[wasm_bindgen(js_namespace = Math)] fn random() -> f64; #[wasm_bindgen(js_namespace = Math)] fn log(a: f64) -> f64; // ... } #}
那么该宏参数也可以移动到外部块
# #![allow(unused_variables)] #fn main() { #[wasm_bindgen(js_namespace = Math)] extern "C" { #[wasm_bindgen] fn random() -> f64; #[wasm_bindgen] fn log(a: f64) -> f64; // ... } #}
js_namespace = …
在单个项目上的优先级高于外部块的 js_namespace = …
。