getter
和 setter
getter
和 setter
屬性可以用在 Rust impl
區塊中,以定義 JS 中的屬性,其行為就像欄位的 getter 和 setter。例如:
#![allow(unused)] 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)] 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_
不是函式的前綴,則不顯式提供名稱會產生錯誤。