gettersetter

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