gettersetter

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