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_
不是函式的前綴,則不提供名稱會造成錯誤。