getter
和 setter
getter
和 setter
属性可以在 Rust impl
块中使用,以定义 JS 中类似于字段的 getter 和 setter 的属性。例如
# #![allow(unused_variables)] #fn main() { #[wasm_bindgen] pub struct Baz { field: i32, } #[wasm_bindgen] impl Baz { #[wasm_bindgen(constructor)] pub fn new(field: i32) -> Baz { Baz { field } } #[wasm_bindgen(getter)] pub fn field(&self) -> i32 { self.field } #[wasm_bindgen(setter)] pub fn set_field(&mut self, field: i32) { self.field = field; } } #}
可以像此代码片段中那样在 JavaScript
中组合使用
const obj = new Baz(3);
assert.equal(obj.field, 3);
obj.field = 4;
assert.equal(obj.field, 4);
您还可以配置在 JS 中导出的属性的名称,如下所示
# #![allow(unused_variables)] #fn main() { #[wasm_bindgen] impl Baz { #[wasm_bindgen(getter = anotherName)] pub fn field(&self) -> i32 { self.field } #[wasm_bindgen(setter = anotherName)] pub fn set_field(&mut self, field: i32) { self.field = field; } } #}
Getter 预期除了 &self
之外不接收任何参数,并返回字段的类型。Setter 预期除了 &mut self
(或 &self
)之外接收一个参数,并且不返回值。
getter
的名称默认从它附加到的函数名推断得出。setter
的默认名称是函数名减去 set_
前缀,如果 set_
不是函数的前缀,则不显式提供名称会出错。